当前位置:首页 > PHP教程 > php高级应用 > 列表

php实时推送系统消息给客户端的原理及详解

发布:smiling 来源: PHP粉丝网  添加日期:2022-05-26 11:01:23 浏览: 评论:0 

在我们实际开发过程中,有些数据需要实时获取;

比如erp系统中的订单信息,OA系统中的流程审批等都需要及时处理,这时我们就不能再使用http协议了;当然也可以使用轮询的机制。

但是轮询请求中有大半是无用,浪费带宽和服务器资源。

这时我们就得使用websocket协议来满足这种业务需求;

准备工作:

安装PHP-swoole拓展;

直接贴代码;

  1. <?php 
  2.  
  3. new class 
  4.  
  5. { 
  6.  
  7.     private $_serv = null; 
  8.  
  9.     public function __construct() 
  10.  
  11.     { 
  12.  
  13.         $this->_serv = new swoole_websocket_server('0.0.0.0', 6552); 
  14.  
  15.         $this->_serv->set(array( 
  16.  
  17.             'worker_num'      => 2, 
  18.  
  19.             'dispatch_mode'   => 3, 
  20.  
  21.         'log_file' => 'swoole.log', 
  22.  
  23.         )); 
  24.  
  25.   //增加个监听端口 
  26.  
  27.     $udpworker =  $this->_serv->listen("127.0.0.1", 6553, SWOOLE_SOCK_UDP); 
  28.  
  29.     $udpworker->on('Packet', function ($serv, $data, $addr) { 
  30.  
  31.             $data = json_decode($data, true); 
  32.  
  33.             if(!emptyempty($data)){ 
  34.  
  35.                 //你的业务逻辑 
  36.  
  37.             } 
  38.  
  39.         }); 
  40.  
  41.         $this->_serv->on('open', array($this, 'onStart')); 
  42.  
  43.         $this->_serv->on('message', array($this, 'onMessage')); 
  44.  
  45.         $this->_serv->on('close', array($this, 'onClose')); 
  46.  
  47.         $this->_serv->start(); 
  48.  
  49.     } 
  50.  
  51.      
  52.  
  53.     public function onStart($serv, $request) 
  54.  
  55.     { 
  56.  
  57.         echo "server: connect success with fd {$request->fd}\n"; 
  58.  
  59.     } 
  60.  
  61.     //format:'{"school_class_id":"1","school_id":"2"}' 
  62.  
  63.     public function onMessage($serv, $frame) 
  64.  
  65.     { 
  66.  
  67.     /**start*你的业务逻辑***/ 
  68.  
  69.     } 
  70.  
  71.     public function onClose($serv, $fd) 
  72.  
  73.     { 
  74.  
  75.         echo "client {$fd} closed\n"; 
  76.  
  77.     } 
  78.  
  79. } 
  80.  
  81. ?> 

原理:首先创建websocket服务器对象,监听0.0.0.0:6552端口,然后在用服务对象去监听UDP 6553的端口。客户端消息发送到6553借口,然后在通过6552端口发送给用户。

Tags: php实时推送系统消息

分享到: