php实时推送系统消息给客户端的原理及详解
发布时间:2022-06-30 09:50:49 所属栏目:PHP教程 来源:互联网
导读:在我们实际开发过程中,有些数据需要实时获取; 比如erp系统中的订单信息,OA系统中的流程审批等都需要及时处理,这时我们就不能再使用http协议了;当然也可以使用轮询的机制。 但是轮询请求中有大半是无用,浪费带宽和服务器资源。 这时我们就得使用websocke
|
在我们实际开发过程中,有些数据需要实时获取; 比如erp系统中的订单信息,OA系统中的流程审批等都需要及时处理,这时我们就不能再使用http协议了;当然也可以使用轮询的机制。 但是轮询请求中有大半是无用,浪费带宽和服务器资源。 这时我们就得使用websocket协议来满足这种业务需求; 准备工作: 安装PHP-swoole拓展; 直接贴代码; <?php new class { private $_serv = null; public function __construct() { $this->_serv = new swoole_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(!emptyempty($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(); } public function onStart($serv, $request) { echo "server: connect success with fd {$request->fd}n"; } //format:'{"school_class_id":"1","school_id":"2"}' public function onMessage($serv, $frame) { /**start*你的业务逻辑***/ } public function onClose($serv, $fd) { echo "client {$fd} closedn"; } } ?> 原理:首先创建websocket服务器对象,监听0.0.0.0:6552端口,然后在用服务对象去监听UDP 6553的端口。客户端消息发送到6553借口,然后在通过6552端口发送给用户。 (编辑:揭阳站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |



