emqx通知客户端离线的时间比较理论值长

版本:4.3
配置:keepalive=60s, keepalive_backoff=0.75
问题:
当客户端异常断开mqtt连接,理论上 EMQX 如果在 Keepalive * backoff * 2=90 的时间内未收到客户端的任何数据报文,则认为客户端已心跳超时,会发送系统主题告知某客户端已掉线。
但是实际测试会有90多秒和120秒左右才能收到客户端离线的通知

Keepalive * backoff * 2 只是 emqx 检查断线的一个大概的时间点,并不准。这是因为 emqx 启动的检查定时器的间隔是 Keepalive * backoff,你这里就是 60s * 0.75 = 45s,所以精确度就在 45s * 2 = 90s 到 45s * 3 = 135s 范围内。

keepalive_backoff 设置越接近 0.5,断开的时间点就越靠近 Keepalive 值,定时器间隔也越小所以会越精确。但是无法做到更精确了。