Gatewayclient建立连接之后 client_id 经常变化问题

Jartin

项目背景:自动售货机,自动售货机可以设定服务IP 端口 心跳间隔(只能设定最小间隔为60s 目前就是设定的60s)
服务端:gatewayworker [php start.php start -d启动、pingInterval =70 && pingNotResponseLimit = 1、启动之后workerman.log无报错信息 整体服务正常]

问题:机器主板发送心跳给服务端 机器主板固定心跳间隔不得小于60秒 目前主体正常 但是每20分钟左右client_id(服务端会话id)都会发生变化 导致机器不能出货 因为断开长连接了 拿到的那个存储的client_id无效 有没有好的方法可以保持尽量不在70秒的时候长连接就挂了

2706 3 0
3个回答

walkor 打赏

不要存client_id,client_id是连接id,连接断开就没有用了,不要指望连接能一直维持不断,那不现实。

使用Gateway::bindUid($client_id, 设备id)将client_id和设备id绑定,利用 Gateway::sendToUid(设备id, 数据)给设备发送数据。这样就不用担心client_id变化问题。

设备心跳间隔最好小于60秒,因为外网环境复杂,有些路由节点可能会清理60秒不活跃的连接导致连接断开。

Jartin

好的 感谢

  • 暂无评论
super18man

截图
我的也是频率更快 client_id连接几次就更换了,现在在测试阶段。在本机。心跳在30秒

  • six 2021-02-01

    连接断开了client_id就变了

  • super18man 2021-02-02

    @1393:我的是一直连接的,感觉是没有断开的,从时间上可以看出来,可能网络波动吧,我把心跳包频率设置30s,好像没啥用。

  • six 2021-02-02

    看到有打印closed,应该是断开了

  • super18man 2021-02-02

    @1393:对,我在连接断开时的onclose()输出 close,系统认定是断开了。

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