1、setKeepAliveInterval设置1、10、60、120,日志追踪都能看到客户端、服务端相互发送心跳包
2、本地开了服务端,不消费、不发送,超时设置1200,都不会自动断开连接
3、想问下管理员和开发高手,到底怎么设置keep alive,才能超时断开
1.你使用的emqx 版本是多少?
2.如果你都看到了互发心跳,说明是你的客户端主动发的 ping,服务端不会主动发起心跳的,他只会回应pong 给客户端。
3.最新版本的超时断开在这里配置,不过你应该没有走到这一步。
感谢管理员回复!
1、emqx本地版本是5.3.0
2、看了文档,keep alive是不是依赖服务端?,单位有购买emqx的服务,我自己本地搭了emqx的服务,两个测试都在不消费、不发送的情况下, 始终断不了。
3、keep alive文档好像是服务端设置了,客户端设置就无效,我自己emqx dashborad设置了好像无效,一直没法断开
4、是不是windows和linux环境的参数和tcp行为不一样
5、还是说要设置clean session或者其他参数什么的
6、目前测试windows环境,emqx本地5.3.0,是设置了setKeepAliveInterval,客户端会自动发送PING,是因为windows环境吗?还是需要额外参数配置?
7、目前表现是emqx dashboard和connectionLost钩子函数都表明客户端始终无法因为keep alive超时断联
8、目前疑惑是为什么客户端会设置 setKeepAliveInterval,自动发送心跳,设置1秒就是每秒发送,设置10秒就是每10秒发送,设置120秒就是每120秒发送,那这样设置没有意义了,总会自动发送心跳包
9、如何才能让服务端主动断联?
他的机制就是这样的啊。
MQTT 协议这个心跳间隔可以通过 connect包里面的字段设置的(就是你说的setKeepAliveInterval函数)。他每次 connect上来就会告诉服务器,他的心跳间隔是 N 秒(表明他会 N 秒给服务端发一个 ping,服务端就会对 ping 回一个pong),如果超过 1.5*N 秒没有收到客户端发来的心跳,服务端就会让人这个连接无效了,把他踢下线。
你想要服务端主动断联,你就得不让客户端不在要规定时间发 ping,可以自己在对应客户端的 SDK 库找找线索。
感谢管理员回复!这下清楚了。