项目背景:自动售货机,自动售货机可以设定服务IP 端口 心跳间隔(只能设定最小间隔为60s 目前就是设定的60s)
服务端:gatewayworker [php start.php start -d启动、pingInterval =70 && pingNotResponseLimit = 1、启动之后workerman.log无报错信息 整体服务正常]
问题:机器主板发送心跳给服务端 机器主板固定心跳间隔不得小于60秒 目前主体正常 但是每20分钟左右client_id(服务端会话id)都会发生变化 导致机器不能出货 因为断开长连接了 拿到的那个存储的client_id无效 有没有好的方法可以保持尽量不在70秒的时候长连接就挂了
不要存client_id,client_id是连接id,连接断开就没有用了,不要指望连接能一直维持不断,那不现实。
使用
Gateway::bindUid($client_id, 设备id)
将client_id和设备id绑定,利用Gateway::sendToUid(设备id, 数据)
给设备发送数据。这样就不用担心client_id变化问题。设备心跳间隔最好小于60秒,因为外网环境复杂,有些路由节点可能会清理60秒不活跃的连接导致连接断开。
好的 感谢
好的 感谢
我的也是频率更快 client_id连接几次就更换了,现在在测试阶段。在本机。心跳在30秒
连接断开了client_id就变了
@1393:我的是一直连接的,感觉是没有断开的,从时间上可以看出来,可能网络波动吧,我把心跳包频率设置30s,好像没啥用。
看到有打印closed,应该是断开了
@1393:对,我在连接断开时的onclose()输出 close,系统认定是断开了。