在webman中使用composer require webman/gateway-worker安装gateway-worker,并配置了心跳时间为55秒,使用的websocket协议,现在实际客户端每间隔20秒会发送一次数据,在大概13分钟左右还是会触发1006被远端关闭
<?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' => []
],
];
Debian 12
由于心跳是周期性检测,实际执行onClose的时间一般会大于pingInterval*pingNotResponseLimit=55,误差在pingInterval内。
客户端的心跳周期应该要比服务端设置的$gateway->pingInterval=55小一些,例如客户端50秒发送一段数给服务端