GatewayWorker 心跳问题

evilk

请教个关于心跳的问题

1.GatewayWorker 文档中 技巧1,服务端不发送任何心跳数据,
通过 客户端主动发送的数据判断客户端是否存活,
如果是通过浏览器的websocket链接的,那是不是 要通过 js
通过 ws.send(xxxxx); 定时向service端 发送任意心跳数据呢,如果是定时发送任意心跳数据,
这样会不会 心跳数据 跟 正常的业务数据 混淆呢,这样的话,是不是需要在service端的onMessage()
中 区分 心跳数据 与 业务数据,而这个通过Js的定时,这个时间间隔 是随意设定的吗?

2.根据文档来看,貌似 最好采用技巧2的方式,即 $gateway->pingNotResponseLimit = 2;
这样service端能及时的知晓客户端的链接情况,能这样理解吗?

6119 2 0
2个回答

walkor

1.onMessage里是要区分心跳数据和业务数据的。心跳间隔最好在1分钟以内。

是的,最好采用技巧2的方式。service能比较及时的直到客户端异常下线的情况(断网 断电等)

  • evilk 2017-08-02

    问题2,写错了,应该是 最好采用技巧1吧,大大是不是也看错了,哈哈

  • walkor 2017-08-02

    对,技巧1

  • tl54577 2018-12-17

    @1:如果使用技巧1,如果客户端突然掉线或者断网,服务端怎么知道连接已经断开呢

  • walkor 2018-12-17

    手册有写,客户端超过心跳设置时间没有发送数据就认为断开

JoeZing

客户端的主动心跳包肯定要在onMessage中做逻辑处理,
我目前采用的方式是通过客户端与服务器约定的协议,例如所有发给Gateway的消息都必须带上action这个参数,例如action:ping,在onMessage中做swtich处理;

  • 暂无评论
年代过于久远,无法发表回答
🔝