当前位置: 首页 > 后端技术 > PHP

PHP实时向客户端推送系统消息

时间:2023-03-29 19:22:18 PHP

在我们实际开发过程中,需要实时获取一些数据。比如erp系统中的订单信息,OA系统中的流程审批,都需要及时处理。这时候,我们就不能再使用http协议了;当然也可以使用轮询机制。但是大多数轮询请求是无用的,浪费带宽和服务器资源。这时候我们就不得不使用websocket协议来满足这个业务需求了。准备工作:安装PHP-swoole扩展;直接粘贴代码:_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)){//你的业务logic}});$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:connectsuccesswithfd{}\n";}//format:'{"school_class_id":"1","school_id":"2"}'publicfunctiononMessage($serv,$frame){/**start*yourbusinesslogic***/}publicfunctiononClose($serv,$fd){echo"client{}closed\n";}}?>原理:首先创建一个websocket服务器对象,监听0.0.0.0:6552端口,然后使用服务对象监听UDP6553端口。客户端消息发送到6553接口,再通过6552端口发送给用户。