环境
-
EMQX 版本:5.1.0
-
操作系统版本:Debian GNU/Linux 11
-
Keep Alive Multiplier 是默认配置,在web管理页面上查看是1.5
重现此问题的步骤
- 客户端设置Keep Alive = 20秒,建立连接
- 断开客户端的网络,并使用秒表开始计时
- 在EMQX的Web管理后台中,持续查询客户端在线状态
- 当秒表显示56秒时查询到状态为离线
预期行为
我的预期是心跳超时时间不应该超过Keep Alive的2倍,即心跳超时时间不应超过40秒。EMQX应该在40秒内检测到客户端心跳超时,断开客户端连接
实际行为
实际心跳超时时间是56秒,即客户端断网56秒后,EMQX才检测到超时,断开客户端连接
2023-10-11T13:59:43.851227+08:00 [MQTT] fs-device-sn1@60.29.3.146:53731 msg: mqtt_packet_received, packet: CONNECT(Q0, R0, D0, ClientId=fs-device-sn1, ProtoName=MQTT, ProtoVsn=4, CleanStart=true, KeepAlive=20, Username=fs-device-sn1|type=device, Password=******)
大概在13:59:47秒断开了客户端网络
2023-10-11T14:00:43.855035+08:00 [SOCKET] fs-device-sn1@60.29.3.146:53731 msg: emqx_connection_terminated, reason: {shutdown,keepalive_timeout}
日志文件:
fs.zip (1.4 KB)
配置文件:
emqx.zip (781 字节)