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

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

Tags: php实时推送系统消息

分享到: