Dans le processus de construction du système de centre commercial, nous aurons besoin d'une fonction de rappel de commande, c'est-à-dire qu'un rappel sera émis lorsqu'une nouvelle commande arrivera. La façon dont je le mets en œuvre est qu'après avoir passé une commande, il rappellera "Vous avez une nouvelle commande, veuillez la vérifier attentivement!"
Solution
sondage ajax (Apprentissage recommandé : Programmation PHP de l'entrée à la maîtrise)
La méthode de sondage est relativement simple , c'est-à-dire à chaque fois Combien de secondes pour lancer une demande. S'il n'y a pas beaucoup de commandes dans le projet, l'envoi d'une requête toutes les quelques secondes mettra beaucoup de pression sur le serveur.
<script> setInterval("order()",59000000);//每59秒刷新查询一次 var last_count = {$count}; function order() { var data = { 'last_count':last_count }; $.ajax({ type: "POST", data: data, url: "{:url('Order/sendOrderNotice')}",//后台方法 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>
Ce qui précède est le cœur de cette solution. Veuillez écrire le code back-end selon votre propre logique métier.
Workerman
Workerman est un framework de service de socket PHP open source hautes performances développé uniquement en PHP.
Workerman ne réinvente pas la roue. Il ne s'agit pas d'un framework MVC, mais d'un framework de service socket de niveau inférieur et plus général. Vous pouvez l'utiliser pour développer des agents TCP, des agents ladder, des serveurs de jeux, des serveurs de messagerie, et des serveurs ftp, et même développer une version PHP de redis, une version PHP de la base de données, une version PHP de nginx, une version PHP de php-fpm, etc. Workerman peut être considéré comme une innovation dans le domaine de PHP, permettant aux développeurs de s'affranchir complètement des contraintes que PHP ne peut faire que sur le WEB.
En fait, Workerman est similaire à une version PHP de nginx. Le noyau est également multi-processus + Epoll + IO non bloquant. Chaque processus Workerman peut maintenir des dizaines de milliers de connexions simultanées.
Parce qu'il réside en mémoire, il ne s'appuie pas sur des conteneurs tels qu'Apache, nginx et php-fpm, et offre des performances ultra élevées. Il prend également en charge TCP, UDP, UNIXSOCKET, les connexions longues, Websocket, HTTP, WSS, HTTPS et d'autres protocoles de communication ainsi que divers protocoles personnalisés.
Il possède de nombreux composants hautes performances tels que des minuteries, des clients socket asynchrones, Mysql asynchrone, Redis asynchrone, Http asynchrone, des files d'attente de messages asynchrones, etc.
Code page de suivi des commandes :
<script src='http://cdn.bootcss.com/socket.io/1.3.7/socket.io.js'></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('http://www.tp5_test.com:2120'); //http://www.tp5_test.com换成自己的域名或者ip // uid可以是自己网站的用户id,以便针对uid推送以及统计在线人数,这个ID可以随便写 uid = 1557062581000; // socket连接后以uid登录 socket.on('connect', function(){ socket.emit('login', uid); }); <!--// 后端推送来消息时--> socket.on('new_msg', function(msg){ //两种处理方式 // 1 追加到页面元素中,可以做成页面的弹窗 $("#msg").append(msg); //2 播放提示应 : if(msg == 1){ var audio = document.getElementById( "play" ); //浏览器支持 audio audio.play(); //播放提示音 } }); // 后端推送来在线数据时 socket.on('update_online_count', function(online_stat){ console.log(online_stat); }); </script>
Code backend :
//这个方法我随便写了写,具体的处理就是在支付完成回调以后,用用send_workerman方法就可以了。我是用sends来模型支付完成以后的回调 public function sends($id) { // var_dump($id);die; if($id == 1){ $this->send_workman($id); }else{ echo '没有发送消息'; } } /** * @route('send_workman') */ public function send_workman($id) { $to_uid = '1557062581000'; //和页面的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); }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!