ホームページ  >  記事  >  バックエンド開発  >  PHPで新しい注文プロンプト機能を実装する方法

PHPで新しい注文プロンプト機能を実装する方法

(*-*)浩
(*-*)浩オリジナル
2019-09-12 10:03:045273ブラウズ

モールシステムを構築する過程で、注文リマインダー機能、つまり新しい注文が来たときにリマインドする機能が必要になります。私の実装方法は、注文後に「新しい注文があります。慎重に確認してください。」というプロンプトが表示されるというものです。

PHPで新しい注文プロンプト機能を実装する方法

#ajax ポーリング

(推奨学習: PHP プログラミングの入門から習熟まで
)

ポーリング方法は比較的単純です。つまり、毎回、リクエストを開始するまでの秒数です。プロジェクト内のオーダーがそれほど多くない場合、数秒ごとにリクエストを送信すると、サーバーに大きな負荷がかかります。

<script>
    setInterval("order()",59000000);//每59秒刷新查询一次
    var last_count = {$count};
    function order() {
 
        var data = {
            &#39;last_count&#39;:last_count
        };
 
        $.ajax({
            type: "POST",
            data: data,
            url: "{:url(&#39;Order/sendOrderNotice&#39;)}",//后台方法
            timeout: 60000,
            cache: false,
            async: false,
            dataType: "json",
            success: function(data) {
                if(data.status == 1){
                    var audio = document.getElementById( "play" ); //浏览器支持 audio
                    audio.play(); //播放提示音
                    last_count = data.last_count;
                    setTimeout(function(){
                        window.location.reload();
                        }, 3000);
                }
            }
        });
 
    }
 
</script>
上記は、このソリューションの核心です。独自のビジネスロジックに従ってバックエンドコードを記述してください。

Workerman


Workerman は、純粋に PHP で開発されたオープンソースの高性能 PHP ソケット サービス フレームワークです。

Workerman は車輪の再発明ではありません。これは MVC フレームワークではありませんが、低レベルでより一般的なソケット サービス フレームワークです。TCP エージェント、ラダー エージェント、ゲーム サーバー、メール サーバーなどの開発に使用できます。また、PHP バージョンの redis、PHP バージョンのデータベース、PHP バージョンの nginx、PHP バージョンの php-fpm なども開発します。 Workerman は、PHP が WEB しかできないという制約を開発者が完全に取り除くことを可能にする、PHP 分野におけるイノベーションと言えます。

実際、Workerman は nginx の PHP バージョンに似ており、コアもマルチプロセス Epoll ノンブロッキング IO です。各 Workerman プロセスは数万の同時接続を維持できます。

メモリ上に常駐するため、Apache、nginx、php-fpmなどのコンテナに依存せず、超高性能です。また、TCP、UDP、UNIXSOCKET、長時間接続、Websocket、HTTP、WSS、HTTPS などの通信プロトコルやさまざまなカスタム プロトコルもサポートしています。

タイマー、非同期ソケット クライアント、非同期 Mysql、非同期 Redis、非同期 Http、非同期メッセージ キューなど、多くの高性能コンポーネントが含まれています。

注文監視ページ コード:

<script src=&#39;http://cdn.bootcss.com/socket.io/1.3.7/socket.io.js&#39;></script>
<script src="https://g.csdnimg.cn/??lib/jquery/1.12.4/jquery.min.js"></script>
<script>
    // 连接服务端,workerman.net:2120换成实际部署web-msg-sender服务的域名或者ip
    var socket = io(&#39;http://www.tp5_test.com:2120&#39;); //http://www.tp5_test.com换成自己的域名或者ip
    // uid可以是自己网站的用户id,以便针对uid推送以及统计在线人数,这个ID可以随便写
    uid = 1557062581000;
    // socket连接后以uid登录
    socket.on(&#39;connect&#39;, function(){
        socket.emit(&#39;login&#39;, uid);
    });
    <!--// 后端推送来消息时-->
    socket.on(&#39;new_msg&#39;, function(msg){
 
        //两种处理方式
 
        // 1 追加到页面元素中,可以做成页面的弹窗
        $("#msg").append(msg); 
 
 
        //2 播放提示应 :
        if(msg == 1){
            var audio = document.getElementById( "play" ); //浏览器支持 audio
            audio.play(); //播放提示音
        }
 
 
    });
    // 后端推送来在线数据时
    socket.on(&#39;update_online_count&#39;, function(online_stat){
        console.log(online_stat);
    });
</script>

バックエンド コード:

//这个方法我随便写了写,具体的处理就是在支付完成回调以后,用用send_workerman方法就可以了。我是用sends来模型支付完成以后的回调
public function sends($id)
{
    // var_dump($id);die;
    if($id == 1){
      $this->send_workman($id);
    }else{
      echo &#39;没有发送消息&#39;;
    }
}


/**
 * @route(&#39;send_workman&#39;)
 */
public function send_workman($id)
{
    $to_uid = &#39;1557062581000&#39;; //和页面的uid一致,不填写也可以
    // 推送的url地址,使用自己的服务器地址
    $push_api_url = "http://www.tp5_test.com:2121/";
    $post_data = array(
        "type" => "publish",
        "content" => $id,
        "to" => $to_uid,
    );
    $ch = curl_init ();
    curl_setopt ( $ch, CURLOPT_URL, $push_api_url );
    curl_setopt ( $ch, CURLOPT_POST, 1 );
    curl_setopt ( $ch, CURLOPT_HEADER, 0 );
    curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
    curl_setopt ( $ch, CURLOPT_POSTFIELDS, $post_data );
    curl_setopt ( $ch, CURLOPT_HTTPHEADER, array("Expect:"));
    $return = curl_exec ( $ch );
    curl_close ( $ch );
    var_export($return);
}

以上がPHPで新しい注文プロンプト機能を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。