心跳问题 客户端发往网关

h0r1z0n

由于业务需求,现在长连接机制是由客户端发送ping 每10s 服务端回复pong的机制来维持的
开始的时候是由服务器发送ping 客户端回复pong的机制,但是测试由于客户端掉线检测不够灵敏,所以改为了客户端主动发送ping的模式,
提问:
现在要检测客户端的在线情况,如果由客户端发送ping的模式服务器回复pong(onMessage),onClose回调是否依然有效呢(1、网络断开 2、断电),触发的时间能否保证呢

2097 1 1
1个回答

walkor

有效。触发时间和服务端发送ping区别不大

  • h0r1z0n 2019-01-15

    客户端定时发送心跳(推荐)
    客户端定时(间隔最好小于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"}
    按照上面的设置就可以吧

  • walkor 2019-01-15

    可以

  • 张三疯 2019-01-17

    @1:workeman的ping是发送什么?我发送个{"type":"ping"} 服务端回一个未知类型

  • walkor 2019-01-18

    手册说了,数据可以是任意的。不一定是{"type":"ping"}

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