【发布时间】:2018-01-27 18:17:11
【问题描述】:
我目前使用EMQ 作为我们的 MQTT 代理。我需要尽快获得最新的“在线”或只是客户端的连接状态。目前,我让我的后端运行一个订阅 $SYS 主题的客户端,客户端的连接和断开连接事件将作为消息发布到该主题。当客户端连接时,连接的消息将发布到 $SYS/.../connected。断开连接时,将向 $SYS/.../disconnected 发布断开连接的消息。
这种方式的问题是,断开连接的消息只有在客户端正常断开连接时才会立即发布。就像,当客户端故意关闭连接时。但是如果断线是因为网络不通或者断电,那么消息会在3分钟或者更多分钟后发布。
我也尝试使用 LWT(最后遗嘱)方法,但结果与上述方法相似。所以我猜如果断开连接是无意发生的,客户端将没有机会告诉代理它将与代理断开连接。因此,代理肯定需要一段时间才能注意到客户端实际上已断开连接。
那么,我的问题是,我将如何缩短那个时间?我曾经怀疑“保命”这件事与这件事有关。但经过几次经验,事实并非如此。
【问题讨论】: