如何缩短MQTT代理检查客户端连接状态的时间

如何缩短MQTT代理检查客户端连接状态的时间,mqtt,emq,Mqtt,Emq,我目前正在使用作为我们的MQTT代理。我需要得到最新的“在线”或简单的连接状态的客户端尽快。目前,我让我的后端运行一个订阅$SYS主题的客户端,其中客户端的连接和断开事件将作为消息发布到。连接客户端时,已连接的消息将发布到$SYS/../connected。断开连接后,断开连接的消息将发布到$SYS/../disconnected 这种方法的问题是,只有在客户端正常断开连接时,断开连接的消息才会立即发布。例如,当客户端故意关闭连接时。但是,如果断开连接是由于无法访问的网络或电源切断,则消息将在3

我目前正在使用作为我们的MQTT代理。我需要得到最新的“在线”或简单的连接状态的客户端尽快。目前,我让我的后端运行一个订阅$SYS主题的客户端,其中客户端的连接和断开事件将作为消息发布到。连接客户端时,已连接的消息将发布到$SYS/../connected。断开连接后,断开连接的消息将发布到$SYS/../disconnected

这种方法的问题是,只有在客户端正常断开连接时,断开连接的消息才会立即发布。例如,当客户端故意关闭连接时。但是,如果断开连接是由于无法访问的网络或电源切断,则消息将在3分钟或更长时间后发布

我也尝试过使用LWT(最后遗嘱)方法,但结果与上面的类似。因此,我猜想,如果断开连接是无意中发生的,客户机将没有机会告诉代理它将与代理断开连接。因此,经纪人肯定需要一段时间才能注意到客户机实际上已断开连接


所以,我的问题是,我如何缩短时间?我曾经怀疑“保持活力”这件事与此事有关。但是经过几次经历之后,情况就不是这样了。

保持活力是你想要的

重要的一点是要记住,经纪人通常认为客户端在保持活跃值的1.5倍之后断开连接,而不仅仅是保持生存时间。如果将“保持活动”值设置得足够小,则在客户端脱机后,您应该会很快收到通知,但如果客户端未发布/订阅消息速率高于“保持活动”间隔的主题,则这将增加网络流量


可以在MQTT规范中找到保持活动的完整详细信息

我的保持活动时间是60秒。为什么在3分钟后会出现消息?你说代理注意到断开连接所需的时间大约是keep alive值的1.5倍。我只在本地测试了2个客户端。你如何断开客户端的连接?这可能是EMQ的产物,但在Mosquitoi刚刚关闭Wi-Fi的情况下,它的工作原理与预期一样。然后在等待了大约3分钟后,断开连接的消息被发布了。嗨,我回到这个问题上,这次仔细测试了一下。然后我注意到代理认为断开连接是保持活动值的3倍。谢谢你的回答。你是对的,我只是没有注意到你之前说1.5次是“正常”。