swoole里多进程之间监听信息发送

1 篇文章 0 订阅

swoole官网:https://wiki.swoole.com

应用场景:

主服务器用于和客户端(websocket)信息通信----增加了端口监听

从服务器用于接收设备端mqtt信息回传

开启主服务器进程后,在项目中操作中,mqtt服务器中的参数等信息,需要和主服务器进程通信然后才能把数据发送给用户;

 

主体思路:在主服务器里新增监听端口,监听所有给这个端口发送的信息;

 

 

一、搭建主服务器:
    //连接配置   可以按照服务器情况进行设置
    const WS_CONFIG_PARAMS = [
        'reactor_num' => 2, //设置启动的 Reactor 线程数,建议设置为 CPU 核数的 1-4 倍
        'worker_num' => 4, //设置启动的 Worker 进程数
        'max_request' => 1000, //设置 worker 进程的最大任务数
        'max_connection' => 1000, //服务器程序,最大允许的连接数。最大允许维持多少个 TCP 连接
        'dispatch_mode' => 2, // 数据包分发策略
        'daemonize' => 1, //守护进程化 1为转入后台作为守护进程运行
        'task_worker_num' => 0,//开启的task进程数
        'heartbeat_check_interval' => 10,//启用心跳检测,此选项表示每隔多久轮循一次,单位为秒
        'heartbeat_idle_time' => 60*60,//连接最大允许空闲的时间
        'log_file' => '/home/log/swoole/SiteWebsoketswoole.log',
        'log_level' => 1,
        'open_tcp_keepalive' => 1,
        'tcp_keepidle' => 30, //单位秒,连接在 n 秒内没有数据请求,将开始对此连接进行探测。
        'tcp_keepcount' => 3, //探测的次数,超过次数后将 close 此连接。
        'tcp_keepinterval' => 3, //探测的间隔时间,单位秒。
        // 'user' => 'work', //设置 Worker/TaskWorker 子进程的所属用户
        // 'group' => 'work', //设置 Worker/TaskWorker 子进程的进程用户组。
        // 'pid_file' => '/tmp/pid/websocket.pid', //设置 pid 文件地址。
        'reload_async' => true, //设置异步重启开关
        'tcp_fastopen' => true, //开启 TCP 快速握手特性
        'max_coroutine' => 5000, //设置当前工作进程最大协程数量
    ];

   

   搭建websocket服务器连接
        $server = new \swoole_websocket_server(127.0.0.1,9511);

        //配置swoole启动设置
        $server->set(self::WS_CONFIG_PARAMS);

        //配置监听端口   这里我进行了端口监听用于进程之间的消息互发
        $this->serverMonitor($server);

        //监听WebSocket连接打开事件
        $server->on('open', function ($server, $request) {
            echo 'open';
            // $this->onOpen($server, $request);
        });

        //监听WebSocket消息事件
        $server->on('message', function ($server, $frame){
            $this->onMessage($server,$frame->fd,JsonD($frame->data));
        });

        //监听WebSocket关闭消息事件
        $server->on('close', function ($server, $fd) {
            echo 'close';
            // $this->onClose($server, $fd);
        });

        $server->start();

 

   设置监听端口设置:监听给9512发送的信息

/**
     * 多监听一个TCP端口,对外开启TCP服务,并设置TCP服务器的回调

     
     * @return [type] [description]
     */
     function serverMonitor($server)
    {
        $serverData = $server->listen(127.0.0.1, 9512, SWOOLE_SOCK_TCP);
        //需要调用 set 方法覆盖主服务器的设置
        $serverData->set([]);

        $serverData->on('receive', function ($server, $fd, $threadId, $data) {
            if(!$data) return true;

            $data = JsonD($data);
            //推送消息
            
            $this->sendwebSite($data['topic'],$data['msg'],$server);
        });
    }

 

二、与主进程服务器进行连接:  通信端口为9512

       设置连接参数:SWOOLE_KEEP中创建一个 TCP 长连接到服务器端

       $clientSite = new \Swoole\Client(SWOOLE_SOCK_TCP | SWOOLE_KEEP);
        if (!$clientSite->connect(127.0.0.1, 9512, 2)) {
            Log::error($e->getMessage() . ':' . $e->getFile());
            return false;
        }

 

这样,进程之间可以进行通信;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值