page contents

php实时推送系统消息给客户端

在我们实际开发过程中,有些数据需要实时获取;比如erp系统中的订单信息,OA系统中的流程审批等都需要及时处理,这时我们就不能再使用http协议了;当然也可以使用轮询的机制。但是轮询请求中有大半是无用,浪费带宽和服务器资源。

attachments-2020-05-qnZWfCUI5ecc7bfc7d821.png

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

比如erp系统中的订单信息,OA系统中的流程审批等都需要及时处理,这时我们就不能再使用http协议了;

当然也可以使用轮询的机制。但是轮询请求中有大半是无用,浪费带宽和服务器资源,这时我们就得使用websocket协议来满足这种业务需求。

准备工作:

安装PHP-swoole拓展;

直接贴代码:

<?phpnewclass{
private$_serv=null;publicfunction__construct(){$this->_serv=newswoole_websocket_server('0.0.0.0',6552);$this->_serv->set(array('worker_num'=>2,'dispatch_mode'=>3,'log_file'=>'swoole.log',));//增加个监听端口
$udpworker=$this->_serv->listen("127.0.0.1",6553,SWOOLE_SOCK_UDP);$udpworker->on('Packet',function($serv,$data,$addr){$data=json_decode($data,true);if(!empty($data)){//你的业务逻辑
}});$this->_serv->on('open',array($this,'onStart'));$this->_serv->on('message',array($this,'onMessage'));$this->_serv->on('close',array($this,'onClose'));$this->_serv->start();}publicfunctiononStart($serv,$request){echo"server: connect success with fd {}\n";}//format:'{"school_class_id":"1","school_id":"2"}'
publicfunctiononMessage($serv,$frame){/**start*你的业务逻辑***/}publicfunctiononClose($serv,$fd){echo"client {} closed\n";}}?>

原理:

首先创建websocket服务器对象,监听0.0.0.0:6552端口,然后在用服务对象去监听UDP 6553的端口。

客户端消息发送到6553借口,然后在通过6552端口发送给用户。


attachments-2020-05-nDeGHzT45ecc7b7c880fc.jpg

  • 发表于 2020-05-26 10:18
  • 阅读 ( 443 )
  • 分类:PHP开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
Pack
Pack

1135 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1316 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章