gpt4 book ai didi

java - MQTT 知道客户端是否订阅

转载 作者:行者123 更新时间:2023-12-01 21:22:33 24 4
gpt4 key购买 nike

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

在我的例子中,如果客户端 X 已经订阅了 channel A,则客户端 Y 无法订阅 channel A,直到 X 取消订阅。我只能让一名客户在 channel 中订阅

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

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

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

最佳答案

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

您也许可以实现如下所示的内容:

如果有一个主题 foo/bar 并且您只想要一个订阅者,您可以将带有订阅者客户端 ID 负载的保留消息发布到 lock/foo/bar 。然后,您可以在断开连接时向此锁定主题发布“免费”消息,并设置 LWT 来执行相同的操作,以防客户端挂掉。

这样做的问题是,一切都是异步的,因此它为竞争条件打开了很多计时窗口。例如假设 client-1client-2 都想订阅 foo/bar,它们都需要先订阅 lock/foo/bar 检查它的状态。他们几乎同时执行此操作,然后必须等待一段时间才能看到返回的消息(“免费”或客户端 ID)。他们都将获得“免费”,因此都假设他们可以发布他们的客户端 ID。 client-1 首先发布,随后 client-2 发布,然后它们都订阅 foo/bar

关于java - MQTT 知道客户端是否订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38917150/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com