MQTT知道客户是否订阅

时间:2016-08-12 11:43:16

标签: java mqtt paho

问题已发布,Mqtt How a client can get to know that another client is connected or notHow to Find Connected MQTT Client Details

在我的情况下,如果客户端X已经在通道A中订阅,则客户端Y不能订阅通道A,直到X取消订阅。我只能在频道中订阅一个客户

我还可以使用保留消息和LWT的想法吗?

如果是,我不确切地知道从哪里开始。最好从一个简单的例子开始,看看保留的消息和LWT是如何工作的。到目前为止,我只是在发布和订阅方面有经验,但没有更多。

请问,请告诉我一些建议可能是一些链接或示例或任何有用的信息,所以我可以有一个起点。

1 个答案:

答案 0 :(得分:2)

MQTT就是让多个客户订阅相同的主题,它是整个发布/订阅模式和共享信息的一部分。因此,协议中没有任何内容可以满足您的需求。

您可以实现以下内容:

如果有一个主题说initialState.setIn(["posts", "most_popular"], ["array", "of", "values"]); 并且您只想要一个订阅者,则可以将订阅者的客户端ID的有效负载发布到foo/bar的保留消息。然后你可以发布一个" free"断开连接并设置LWT以便在客户端死亡的情况下执行相同的锁定主题。

这个问题是一切都是异步的,所以它为竞争条件打开了很多时间窗口。例如说lock/foo/barclient-1都想订阅client-2,他们都需要先订阅foo/bar来检查其状态。他们都在几乎同时这样做,然后他们必须等待一段时间才能看到他们收到的消息("免费"或客户端ID)。他们都会免费获得#34;所以他们都会假设他们可以发布他们的客户ID。 lock/foo/bar首先发布client-1,然后他们都订阅了client-2