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

标签 mqtt mosquitto

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

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

最佳答案

简短的回答是您没有(在协议(protocol)级别)。

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

稍长的版本:

您可以使用保留的消息和 LWT(最后遗嘱和遗嘱)来做一些事情

例如

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

online/<clientID>

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

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

关于Mqtt 客户端如何知道另一个客户端是否已连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38280283/

相关文章:

javascript - 在 Nodejs 中解析 gzip 流

ssl - SSL 在 MQTT 中的一种工作方式是怎样的?

java - 我如何将带有用户名和密码的 Java mqtt 客户端连接到 emqttd(EMQ) 代理?

ios - 在 iOS 中运行 MQTT 代理

javascript - 需要找到 MQTT 的安全 Websocket 代理

mqtt - mqtt 支持一对多和多对一吗?

rest - IBM 物联网基金会 : When to use MQTT and when to use REST for event submission?

MQTT PAHO - 用于确认成功消息传递的 MessageId

linux - Centos 7 : Auto restart application if it stopped

publish - 即使 MQTT 代理未运行,mosquitto_publish 也会返回 MOSQ_ERR_SUCCESS