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

时间:2018-07-30 04:49:55

标签: mqtt mosquitto

我有“服务器端” 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-client监视这3个事件。这可能吗?如果没有,您可以推荐哪种替代方法来进行“健康”监视?

1 个答案:

答案 0 :(得分:1)

否,您无法从连接的客户端读取这些内容。

唯一的MQTT方法是利用“遗嘱”(LWT)功能。您已经设置了客户端LWT,将保留的消息发布到特定于客户端的主题,并将其标记为脱机。然后,当客户端连接时,它应该发布保留的消息以显示您在线。如果您断然断开连接(不是由保持活动超时触发的,则应在断开连接之前手动发布LWT消息作为最后的内容)。

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