我目前正在使用EMQ作为我们的MQTT经纪人。我需要尽快获得最新的“在线”或简单的客户端连接状态。目前,我让我的后端运行一个订阅$ SYS主题的客户端,其中客户端的连接和断开连接事件将作为消息发布。连接客户端时,连接的消息将发布到$ SYS /.../ connected。断开连接后,将断开连接的消息发布到$ SYS /.../ disconnected。
此方法的问题在于,只有在客户端正常断开连接时才会立即发布断开连接的消息。就像,当客户故意关闭连接时。但如果断开是由于无法访问的网络或电源中断,则该消息将在3分钟或更长时间后发布。
我也尝试过使用LWT(Last Will Testament)方法,但结果与上面的结果类似。所以我想如果无意中发生断开连接,客户端将没有机会告诉代理它将与代理断开连接。因此,经纪人必须注意到客户端实际上已断开连接。
所以,我的问题是,我将如何缩短那段时间?我曾经怀疑“保持活力”的事情与此事有关。但经过几次经历后,事实并非如此。
答案 0 :(得分:2)
保持活力是你想要的
重要的是要记住,经纪人通常认为客户端在保持活动值的1.5倍左右时断开连接,而不仅仅是保持活动时间。如果您将保持活动值设置得足够小,则应在客户端脱机后很快得到通知,但如果客户端不发布/订阅消息速率高于保持活动的主题,则会增加网络流量间隔。
可以在here
找到MQTT规范中保持活动的完整详细信息