gatewayworker2 设备关机,无法触发onClose ,只有服务端断开才会触发

lf

使用tcp协议 ,设备断开后没有触发onClose方法,进行下线,当服务端停止后,才会触发onClose方法 ,跪求大佬解答

1870 2 0
2个回答

walkor
  • lf 2020-12-23

    大佬,没太看懂文档,按照我的理解,是客户端心跳中断后,应该触发onClose ,但是现在只有服务进程彻底断开才会触发onClose

  • walkor 2020-12-24

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

    以上摘自手册,解释了为什么断电后无法立刻触发onClose。

  • lf 2020-12-24

    所以,就是说,断电后会有一个周期,去发现是否断线,然后触发 onClose

  • lf 2020-12-24

    正常退出是没问题的,但是设备断电,想通过心跳判断断开,但等了数个周期仍没有触发onClose

  • walkor 2020-12-24

    设置好 $gateway->pingNotResponseLimit 不为0,然后restart重启GatewayWorker,注意是restart,不是reload。

  • lf 2020-12-24

    @1:

lf

已经设置了,心跳设置放在Events文件截图 截图

  • walkor 2020-12-24

    在start_gateway.php 里设置

  • lf 2020-12-24

    大佬。我没有这个文件,使用的tp框架集成的。

  • lf 2020-12-24

    已解决 ,找到问题了,多谢大佬

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