如何缩短MQTT代理程序检查客户端连接状态的时间
问题描述:
我目前使用EMQ作为我们的MQTT代理程序。我需要尽可能快地获得最新的“在线”或简单的客户端连接状态。目前,我让后台运行一个预订$ SYS主题的客户端,客户端的连接和断开连接事件将作为消息发布。当客户端连接时,连接的消息将发布到$ SYS /.../ connected。当它断开连接时,断开的消息将被发布到$ SYS /.../断开连接。如何缩短MQTT代理程序检查客户端连接状态的时间
这种方法的问题是断开连接的消息只会在客户端正常断开时才会立即发布。就像当客户有意关闭连接一样。但是,如果断开连接是由于无法连接的网络或电源切断引起的,则该消息将在3分钟或更长时间后发布。
我也试过使用LWT(Last Will Testament)方法,但结果与上面的类似。所以我猜如果无意中发生了断线,客户将没有机会告诉经纪人它将与经纪人断开。所以,经纪人肯定需要花点时间注意客户实际上是断开的。
所以,我的问题是,我该如何缩短那个时间?我曾怀疑“保持活力”的事情与这件事有关。但是在经历了几次之后,事实并非如此。
答
保活是你想要
什么最重要的一点是要记住,经纪人通常会考虑后约1.5倍的客户端断开永葆价值,而不仅仅是保持活动的时间。如果将保持活跃值设置得足够小,则在客户端脱机后应该很快得到通知,但是如果客户端没有发布/订阅消息速率高于保持活动的主题,则这会增加网络流量间隔。的
全部细节在MQTT规范保活,可以发现here
我存活了60秒。 3分钟后的消息是怎么来的?你说过,经纪人需要注意断开连接的时间大约是保持活力值的1.5倍。我只用2个客户端在本地进行了测试。 –
你如何断开客户端?这可能是一个EMQ的人工制品,但它的工作方式与蚊子一样 – hardillb
我刚刚关闭了Wi-Fi。然后等待大约3分钟后,发布断开连接消息。 –