MQTT - 监听 ping、断开和连接事件
MQTT - listen to ping, disconnect and connect events
我有 "server side" 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 个事件。这可能吗?如果没有,您可以推荐哪种 "health" 监控替代方法?
不,您无法从连接的客户端读取这些内容。
唯一的纯 MQTT 方法是使用 Last Will and Testament (LWT) 功能。您让客户端设置 LWT 将保留消息发布到客户端特定主题,将其标记为离线。然后当客户端连接时,它应该发布一条保留消息以显示您在线。如果您完全断开连接(不是由保持活动超时触发,您应该在断开连接之前手动发布 LWT 消息作为最后一件事)。
还值得指出的是,只有在保持活动期间客户端和代理之间没有发送其他消息时,才会发送 ping 消息。
我有 "server side" 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 个事件。这可能吗?如果没有,您可以推荐哪种 "health" 监控替代方法?
不,您无法从连接的客户端读取这些内容。
唯一的纯 MQTT 方法是使用 Last Will and Testament (LWT) 功能。您让客户端设置 LWT 将保留消息发布到客户端特定主题,将其标记为离线。然后当客户端连接时,它应该发布一条保留消息以显示您在线。如果您完全断开连接(不是由保持活动超时触发,您应该在断开连接之前手动发布 LWT 消息作为最后一件事)。
还值得指出的是,只有在保持活动期间客户端和代理之间没有发送其他消息时,才会发送 ping 消息。