加入收藏 | 设为首页 | 会员中心 | 我要投稿 揭阳站长网 (https://www.0663zz.cn/)- 机器学习、行业智能、决策智能、云计算、AI应用!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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端口发送给用户。

(编辑:揭阳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读