目前使用的是EMQX5.3.1开源版,设备心跳是40S,清除会话为true,会话过期间隔0,协议是MQTTv3.1.1,其余设置都按照默认值。有一些设备网络很差时不到40S就离线了,设备有重连机制然后又立马上线了。应该调整哪些参数让设备不这么频繁离线
不到 40s 就离线,这说明很可能不是触发了 MQTT 协议层面的心跳超时(因为那是 40 * 1.5 = 60s),而是触发了 TCP 层面的断开。
*** 弱网环境导致 TCP 重传次数过多,或者网络延迟过高导致设备端 SDK 认为连接已死。
说明网络环境确实恶劣到了 TCP 链路都无法维持的地步。此时应用层的延长(MQTT Keep Alive)只能缓解,无法根治。
如何缓解这个情况,就是让设备离线的情况减少或者间隔拉长
试试,把 40s 设置长一点。改成 120 s
不过我觉得用处不大。