由于业务需求,现在长连接机制是由客户端发送ping 每10s 服务端回复pong的机制来维持的 开始的时候是由服务器发送ping 客户端回复pong的机制,但是测试由于客户端掉线检测不够灵敏,所以改为了客户端主动发送ping的模式, 提问: 现在要检测客户端的在线情况,如果由客户端发送ping的模式服务器回复pong(onMessage),onClose回调是否依然有效呢(1、网络断开 2、断电),触发的时间能否保证呢
有效。触发时间和服务端发送ping区别不大
客户端定时发送心跳(推荐) 客户端定时(间隔最好小于60秒)向服务端发送心跳。服务端类似以下配置:
$gateway = new Gateway("Websocket://0.0.0.0:8585");
$gateway->pingInterval = 55;
$gateway->pingNotResponseLimit = 1;
$gateway->pingData = ''; 以上配置含义是客户端连接 pingInterval*pingNotResponseLimit=55 秒内没有任何请求则服务端认为对应客户端已经掉线,服务端关闭连接并触发onClose回调。
看了一下文档,这个意思是 55秒必须受到客户端的任何数据包,否者就触发onClose ? 目前我们的心跳包是客户端发个一个{"type":"ping"} 服务端回一个{"type":"pong"} 按照上面的设置就可以吧
可以
@1:workeman的ping是发送什么?我发送个{"type":"ping"} 服务端回一个未知类型
手册说了,数据可以是任意的。不一定是{"type":"ping"}
有效。触发时间和服务端发送ping区别不大
客户端定时发送心跳(推荐)
客户端定时(间隔最好小于60秒)向服务端发送心跳。服务端类似以下配置:
$gateway = new Gateway("Websocket://0.0.0.0:8585");
$gateway->pingInterval = 55;
$gateway->pingNotResponseLimit = 1;
$gateway->pingData = '';
以上配置含义是客户端连接 pingInterval*pingNotResponseLimit=55 秒内没有任何请求则服务端认为对应客户端已经掉线,服务端关闭连接并触发onClose回调。
看了一下文档,这个意思是 55秒必须受到客户端的任何数据包,否者就触发onClose ?
目前我们的心跳包是客户端发个一个{"type":"ping"} 服务端回一个{"type":"pong"}
按照上面的设置就可以吧
可以
@1:workeman的ping是发送什么?我发送个{"type":"ping"} 服务端回一个未知类型
手册说了,数据可以是任意的。不一定是{"type":"ping"}