您的位置:首页 > 技术中心 > php框架 >

workerman如何保持连接

时间:2019-12-06 14:50

正常的情况客户端断开连接会向服务端发送一个fin包,服务端收到fin包后得知客户端连接断开,则立刻触发onClose事件回调。

但是有些极端情况如客户端掉电、网络关闭、拔网线、路由故障等,这些极端情况客户端无法发送fin包给服务端,服务端便无法知道连接已经断开。如果客户端与服务端定时有心跳数据传输,则会比较及时的发现连接断开,触发onClose事件回调。

另外路由节点防火墙会关闭长时间不通讯的socket连接,导致socket长连接断开。所以需要客户端与服务端定时发送心跳数据保持连接不被断开。

GatewayWorker中如何配置心跳检测?

目前GatewayWorker支持两种心跳检测,服务端设定多少秒内没收到心跳关闭连接(推荐),同时也支持服务端定时向客户端发送心跳数据(不推荐)。

客户端定时发送心跳(推荐)

客户端定时(间隔最好小于60秒)向服务端发送心跳。服务端类似以下配置:

$gateway = new Gateway("Websocket://0.0.0.0:8585");
$gateway->pingInterval = 55;
$gateway->pingNotResponseLimit = 1;
$gateway->pingData = '';

以上配置含义是客户端连接 pingInterval*pingNotResponseLimit=55 秒内没有任何请求则服务端认为对应客户端已经掉线,服务端关闭连接并触发onClose回调。

更多workerman知识请关注workerman教程栏目。

以上就是workerman如何保持连接的详细内容,更多请关注gxlsystem.com其它相关文章!

热门排行

今日推荐

热门手游