我有“服务器端”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个事件。这个是可能的吗?如果不是,你能推荐什么替代的“健康”监控方法?
发布于 2018-07-30 14:51:07
不能,您无法从已连接的客户端读取这些内容。
唯一纯粹的MQTT方法是利用Last Will and Testament (Last Will and Testament,LWT)特性。您让客户端设置LWT,将保留的消息发布到客户端特定的主题,该主题将其标记为脱机。然后,当客户端连接时,它应该发布一条保留的消息,以显示您在线。如果您干净地断开连接(不是由keep alive time out触发的,您应该手动发布LWT消息作为断开连接前的最后一件事)。
还值得指出的是,只有在保持活动期间客户端和代理之间没有发送其他消息时,才会发送ping消息。
https://stackoverflow.com/questions/51587122
复制相似问题