在webman中使用gateway-worker心跳问题

大饭米粒

问题描述

在webman中使用composer require webman/gateway-worker安装gateway-worker,并配置了心跳时间为55秒,使用的websocket协议,现在实际客户端每间隔20秒会发送一次数据,在大概13分钟左右还是会触发1006被远端关闭

gateway-worker配置代码

<?php

use Webman\GatewayWorker\Gateway;
use Webman\GatewayWorker\BusinessWorker;
use Webman\GatewayWorker\Register;

return [
    'gateway' => [
        'handler'     => Gateway::class,
        'listen'      => 'websocket://0.0.0.0:8899',
        'count'       => 2,
        'reloadable'  => false,
        'constructor' => ['config' => [
            'lanIp'           => '127.0.0.1',
            'startPort'       => 2300,
            'pingInterval'    => 55,
            'pingNotResponseLimit'=> 1,
            'pingData'        => '',
            'registerAddress' => '127.0.0.1:1236',
            'onConnect'       => function(){},
        ]]
    ],
    'worker' => [
        'handler'     => BusinessWorker::class,
        'count'       => cpu_count()*2,
        'constructor' => ['config' => [
            'eventHandler'    => plugin\webman\gateway\Events::class,
            'name'            => 'ChatBusinessWorker',
            'registerAddress' => '127.0.0.1:1236',
        ]]
    ],
    'register' => [
        'handler'     => Register::class,
        'listen'      => 'text://127.0.0.1:1236',
        'count'       => 1, // Must be 1
        'reloadable'  => false,
        'constructor' => []
    ],
];

操作系统及workerman/webman等框架组件具体版本

Debian 12

48 1 0
1个回答

Tinywan

由于心跳是周期性检测,实际执行onClose的时间一般会大于pingInterval*pingNotResponseLimit=55,误差在pingInterval内。
客户端的心跳周期应该要比服务端设置的$gateway->pingInterval=55小一些,例如客户端50秒发送一段数给服务端

  • 暂无评论
🔝