MQTT-侦听ping、断开连接和连接事件

MQTT-侦听ping、断开连接和连接事件,mqtt,mosquitto,Mqtt,Mosquitto,我有“服务器端”mqtt客户机,用于监视和管理远程mqtt客户机。我想扩展此服务器模块,以跟踪远程客户端的连接 在正常操作期间,远程客户端根据代理日志定期PING代理: 1532924170: Received PINGREQ from c51 1532924170: Sending PINGRESP to c51 当断开连接时,代理日志也会显示: 1532924976: Client c51 has exceeded timeout, disconnecting. 1532924976: S

我有“服务器端”mqtt客户机,用于监视和管理远程mqtt客户机。我想扩展此服务器模块,以跟踪远程客户端的连接

在正常操作期间,远程客户端根据代理日志定期PING代理:

1532924170: Received PINGREQ from c51
1532924170: Sending PINGRESP to c51
当断开连接时,代理日志也会显示:

1532924976: Client c51 has exceeded timeout, disconnecting.
1532924976: Socket error on client c51, disconnecting.
以及随后的重新连接:

1532924978: New client connected from X.X.X.X as c51 (c1, k30).
1532924978: Sending CONNACK to c51 (0, 0)

我想从服务器模块持有的mqtt客户机监视这3个事件。这可能吗?如果没有,您可以推荐哪种“健康”监测的替代方法?

否,您不能从连接的客户端读取这些信息

唯一纯粹的MQTT方法是利用最后的遗嘱和遗嘱(LWT)特性。您可以让客户端设置LWT,将保留的消息发布到特定于客户端的主题,并将其标记为脱机。然后,当客户端连接时,它应该发布一条保留的消息,以显示您处于联机状态。如果干净地断开连接(不由保持活动超时触发),则应在断开连接之前手动发布LWT消息


还值得指出的是,ping消息只有在保持活动期间客户端和代理之间没有发送其他消息的情况下才会被发送。

谢谢@hardillb-我正在努力让mosquitto发布我的LWT-因此采用了另一种方法。除非你想继续构建自己的代理(使用类似于mosca的工具)那么LWT是您唯一的选择(它将作为规范的一部分跨代理)@pstanton我刚刚记住,从技术上讲,您可以将所有mosquitto日志消息重定向到
$SYS/broker/log/…
主题,这样您就可以在远程客户端中使用它们,但LWT选项仍然是最好的解决方法。agree@hardillb-我已经解决了LWT的问题,现在已经实现了您的方法。最佳实践–您应该何时使用LWT?