Heim >Backend-Entwicklung >PHP-Problem >So implementieren Sie eine neue Bestellaufforderungsfunktion in PHP

So implementieren Sie eine neue Bestellaufforderungsfunktion in PHP

(*-*)浩
(*-*)浩Original
2019-09-12 10:03:045331Durchsuche

Während des Aufbaus des Mall-Systems werden wir um eine Bestellerinnerungsfunktion bitten, d. h. wenn eine neue Bestellung eingeht, wird diese daran erinnert. Die Art und Weise, wie ich es umsetze, ist, dass nach der Bestellung eine Erinnerung angezeigt wird: „Sie haben eine neue Bestellung, bitte überprüfen Sie diese sorgfältig!“ Lösung

So implementieren Sie eine neue Bestellaufforderungsfunktion in PHP

Ajax-Polling

(Empfohlenes Lernen: PHP-Programmierung vom Einstieg bis zur Beherrschung
)

Die Abfragemethode ist relativ einfach , das heißt, jedes Mal Wie viele Sekunden dauert es, bis eine Anfrage initiiert wird? Wenn das Projekt nicht viele Aufträge enthält, wird der Server stark belastet, wenn alle paar Sekunden eine Anfrage gesendet wird.

<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>
Das Obige ist der Kern dieser Lösung. Bitte schreiben Sie den Back-End-Code entsprechend Ihrer eigenen Geschäftslogik.

Workerman


Workerman ist ein Open-Source-Hochleistungs-PHP-Socket-Service-Framework, das rein in PHP entwickelt wurde.

Workerman erfindet das Rad nicht neu, sondern ein untergeordnetes und allgemeineres Socket-Service-Framework. Sie können es zum Entwickeln von TCP-Agenten, Ladder-Agenten, Spieleservern und Mailservern verwenden. und FTP-Server und entwickeln sogar eine PHP-Version von Redis, eine PHP-Version der Datenbank, eine PHP-Version von Nginx, eine PHP-Version von PHP-FPM usw. Man kann Workerman als eine Innovation im Bereich PHP bezeichnen, die es Entwicklern ermöglicht, die Einschränkungen, die PHP nur für WEB bietet, vollständig zu beseitigen.

Tatsächlich ähnelt Workerman einer PHP-Version von Nginx. Der Kern besteht ebenfalls aus Multiprozess + Epoll + nicht blockierendem IO. Jeder Workerman-Prozess kann Zehntausende gleichzeitiger Verbindungen aufrechterhalten.

Da es sich im Speicher befindet, ist es nicht auf Container wie Apache, Nginx und PHP-FPM angewiesen und verfügt über eine extrem hohe Leistung. Es unterstützt außerdem TCP, UDP, UNIXSOCKET, lange Verbindungen, Websocket, HTTP, WSS, HTTPS und andere Kommunikationsprotokolle sowie verschiedene benutzerdefinierte Protokolle.

Es verfügt über viele leistungsstarke Komponenten wie Timer, asynchrone Socket-Clients, asynchrones MySQL, asynchrones Redis, asynchrones HTTP, asynchrone Nachrichtenwarteschlangen usw.

Code der Auftragsüberwachungsseite:

<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>

Backend-Code:

//这个方法我随便写了写,具体的处理就是在支付完成回调以后,用用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);
}

Das obige ist der detaillierte Inhalt vonSo implementieren Sie eine neue Bestellaufforderungsfunktion in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn