为啥我使用webman自定义进程连接别人的websocket的时候时间长了进程会收不到消息了

shaonian820

为啥我使用webman自定义进程连接别人的websocket的时候时间长了进程会收不到消息了。
这是执行php status.php status的状态 total_request数量一直不增加了。也收不到对方推送的消息了。
代码里也没有报错。查看stdout.log和webman.log也没有报错信息。
截图
连接的时候使用AsyncTcpConnection 类 使用匿名函数的方式定义了onConnect,onClose,onError的回调其中 下列是连接代码。

     public function onWorkerStart($worker)
    {
        var_dump('链接websocket' . date("Y-m-d H:i:s"));

        $websocketConnection = (string)config('futures_websocket');
        //期货
        $futuresCon = new AsyncTcpConnection($websocketConnection);
        //期货websocket
        $this->futuresWebsocket($futuresCon);
    }
    public function futuresWebsocket(AsyncTcpConnection $futuresCon)
    {
        $futuresCon->transport = 'ssl';
        $futuresCon->onConnect = function (AsyncTcpConnection $futuresCon) {
            var_dump('期货ws连接成功' . date("Y-m-d H:i:s"));
            $param = ['id' => mt_rand(0, 100), 'method' => 'SUBSCRIBE', 'params' => Cache::getSubscribeParam()['futures']];
            $futuresCon->send(json_encode($param));
        };
        $futuresCon->onMessage = function (AsyncTcpConnection $futuresCon, $data) {
            $msgData = json_decode($data, true);
            if (!empty($msgData['data']['e'])) {
                Cache::setStreamData($msgData['data']['e'], $msgData['data']['s'],$data);
            }
        };
        $futuresCon->onClose = function (AsyncTcpConnection $futuresCon) {
            $futuresCon->reconnect();
            var_dump("期货ws链接断开,执行重连" . date("Y-m-d H:i:s"));
        };
        $futuresCon->onError = function ($futuresCon, $code, $msg) {
            echo "期货错误信息 $code $msg\n";
        };
        $futuresCon->connect();
    }

截图
websocket连接就一直收不到信息了。然后进程也在,也没有执行onClose的回调。

1011 2 0
2个回答

shaonian820

截图
这时候只有重启整个框架才又ok了。想不明白是啥问题导致的。

  • 暂无评论
2548a

https://www.workerman.net/doc/workerman/faq/heartbeat.html
看你代码跟描述,像是这个问题.

  • shaonian820 2022-09-16

    呃 服务端的websocket里会发ping检测的,workerman会自动响应pong帧。不是心跳的问题

  • six 2022-09-16

    workerman端也要加心跳,或者至少判断下多少秒内没收到对方心跳就断开重连。否则你和对方的网络中断了,你都不知道,自然不会重连了

年代过于久远,无法发表回答
🔝