MQTT 知道客户端是否已订阅
MQTT know if a client is subscribed
问题已经发布,
和 How to Find Connected MQTT Client Details
在我的例子中,如果客户端 X 已经订阅了频道 A,则客户端 Y 无法订阅频道 A,直到 X 取消订阅。我频道只能订阅一个客户端
我也可以使用保留消息和 LWT 的想法吗?
如果是,我不知道应该从哪里开始。最好从一个简单的例子开始,看看保留消息和 LWT 是如何工作的。到目前为止,我只有发布和订阅的经验,没有更多。
能否请您告诉我一些建议,可能是一些链接或示例或任何有用的信息,以便我可以有一个起点。
MQTT 就是让多个客户端订阅相同的主题,它是整个 pub/sub 模式和共享信息的一部分。因此,协议中没有任何内容可以满足您的需求。
您也许可以执行如下操作:
如果有一个主题说 foo/bar
并且您只想要一个订阅者,您可以发布一条保留消息,其中包含订阅者客户端 ID 的有效负载到 lock/foo/bar
。然后,您可以在断开连接时向此锁定主题发布一个 "free",并设置一个 LWT 以在客户端死亡时执行相同的操作。
这样做的问题是一切都是异步的,因此它为竞争条件开辟了很多时间 windows。例如比如说 client-1
和 client-2
都想订阅 foo/bar
,他们都需要先订阅 lock/foo/bar
来检查它的状态。他们几乎同时执行此操作,然后他们必须等待一段时间才能看到返回的消息("free" 或客户端 ID)。他们都会得到 "free" 所以他们都假设他们可以发布他们的客户 ID。 client-1
首先发布,紧随其后的是 client-2
,然后他们都订阅了 foo/bar
。
问题已经发布,
在我的例子中,如果客户端 X 已经订阅了频道 A,则客户端 Y 无法订阅频道 A,直到 X 取消订阅。我频道只能订阅一个客户端
我也可以使用保留消息和 LWT 的想法吗?
如果是,我不知道应该从哪里开始。最好从一个简单的例子开始,看看保留消息和 LWT 是如何工作的。到目前为止,我只有发布和订阅的经验,没有更多。
能否请您告诉我一些建议,可能是一些链接或示例或任何有用的信息,以便我可以有一个起点。
MQTT 就是让多个客户端订阅相同的主题,它是整个 pub/sub 模式和共享信息的一部分。因此,协议中没有任何内容可以满足您的需求。
您也许可以执行如下操作:
如果有一个主题说 foo/bar
并且您只想要一个订阅者,您可以发布一条保留消息,其中包含订阅者客户端 ID 的有效负载到 lock/foo/bar
。然后,您可以在断开连接时向此锁定主题发布一个 "free",并设置一个 LWT 以在客户端死亡时执行相同的操作。
这样做的问题是一切都是异步的,因此它为竞争条件开辟了很多时间 windows。例如比如说 client-1
和 client-2
都想订阅 foo/bar
,他们都需要先订阅 lock/foo/bar
来检查它的状态。他们几乎同时执行此操作,然后他们必须等待一段时间才能看到返回的消息("free" 或客户端 ID)。他们都会得到 "free" 所以他们都假设他们可以发布他们的客户 ID。 client-1
首先发布,紧随其后的是 client-2
,然后他们都订阅了 foo/bar
。