Mqtt 客户端如何知道另一个客户端是否已连接

Raw*_*wat 3 mqtt mosquitto

大家好,我的问题是我需要保持设备(客户端)的状态,因为它们是否在线。

我通过客户端 ID 进行连接,通过订阅主题,我可以知道设备已断开连接,但如果它们再次连接,我如何检查它们是否再次连接。

har*_*llb 10

简短的回答是你不这样做(在协议级别)。

发布者和订阅者完全不知道彼此,消息被发送到主题而不是特定的订阅客户端。

稍长的版本:

您可以使用保留的消息和 LWT(Last Will & Testament)做一些事情

例如

每个客户端向以下主题发布一条保留消息

online/<clientID>
Run Code Online (Sandbox Code Playgroud)

true连接时的有效负载。false它还设置了 LWT,如果客户端因网络故障而断开连接,LWT 将发布有效负载。如果客户端完全断开连接,那么它将需要发布false有效负载作为脱机前的最后一个操作。

要判断客户端是否在线,您可以订阅通配符主题online/+,然后检查主题的最后一段以获取 clientid 和状态的有效负载。