Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MQTT知道客户机是否已订阅_Java_Mqtt_Paho - Fatal编程技术网

Java MQTT知道客户机是否已订阅

Java MQTT知道客户机是否已订阅,java,mqtt,paho,Java,Mqtt,Paho,问题已经发布了, 及 在我的例子中,如果客户端X已经订阅了通道a,客户端Y就不能订阅通道a,直到X取消订阅。我只能在频道中订阅一个客户端 我还可以使用保留消息和LWT的概念吗 如果是,我不知道从哪里开始。最好从一个简单的示例开始,看看保留的消息和LWT是如何工作的。到目前为止,我只有出版和订阅的经验,但没有更多 请告诉我一些建议,可能是一些链接、示例或任何有用的信息,这样我就可以有一个起点。MQTT就是让多个客户订阅相同的主题,它是整个发布/订阅模式的一部分,并共享信息。因此,协议中没有任何东西

问题已经发布了, 及

在我的例子中,如果客户端X已经订阅了通道a,客户端Y就不能订阅通道a,直到X取消订阅。我只能在频道中订阅一个客户端

我还可以使用保留消息和LWT的概念吗

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


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

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

您可能能够实现如下内容:

如果你有一个主题,比如说
foo/bar
,而你只想要一个订阅者,那么你可以将一条保留的消息发布到
lock/foo/bar
。然后,当您断开连接时,您可以向该锁主题发布“免费”,并设置LWT以在客户端死亡时执行相同操作


这样做的问题是,一切都是异步的,因此它为竞争条件打开了许多计时窗口。e、 g.假设
client-1
client-2
都想订阅
foo/bar
,他们都需要先订阅
lock/foo/bar
,以检查其状态。他们几乎同时做这件事,然后他们必须等待一段时间,看看他们收到了什么消息(“免费”或客户id)。他们都将获得“免费”,因此都假设他们可以发布自己的客户机ID
client-1
首先发布不久,然后是
client-2
,然后他们都订阅
foo/bar

MQTT是关于让多个客户端订阅相同的主题,它是整个发布/订阅模式的一部分,并且共享信息。因此,协议中没有任何东西可以满足您的要求

您可能能够实现如下内容:

如果你有一个主题,比如说
foo/bar
,而你只想要一个订阅者,那么你可以将一条保留的消息发布到
lock/foo/bar
。然后,当您断开连接时,您可以向该锁主题发布“免费”,并设置LWT以在客户端死亡时执行相同操作


这样做的问题是,一切都是异步的,因此它为竞争条件打开了许多计时窗口。e、 g.假设
client-1
client-2
都想订阅
foo/bar
,他们都需要先订阅
lock/foo/bar
,以检查其状态。他们几乎同时做这件事,然后他们必须等待一段时间,看看他们收到了什么消息(“免费”或客户id)。他们都将获得“免费”,因此都假设他们可以发布自己的客户机ID
client-1
首先发布不久,然后是
client-2
,然后他们都订阅
foo/bar

为什么您只需要一个订户?因为客户需要。其思想是拥有不同的通信类型:一个发布者/一个客户端,多个发布者/多个客户端。因此,有些频道只能有一个订阅者,但我也可以发布相同的数据,但可以在允许更多订阅者的不同频道中发布。例如,频道温度只接受一个订阅者,而温度2很多为什么您只需要一个订阅者?因为客户端需要。其思想是拥有不同的通信类型:一个发布者/一个客户端,多个发布者/多个客户端。因此,有些频道只能有一个订阅者,但我也可以发布相同的数据,但在允许更多订阅者的不同频道中。例如,频道温度只接受一个订阅者,而温度2 manyHi hardillb,是的,您的问题是对的。但是,还有什么好的选择呢?在另一篇文章中,我读到了向频道发送订阅事件的内容。然后我想如果有人想订阅,他需要知道是否已经有订阅事件基本上我想说的是,这是不可能的MQTToh不。。。我想我唯一的选择是保留消息和lwt,但我不知道如何克服这个问题,至少要避免同时订阅:/。你知道我在哪里可以找到一个使用保留消息的小实现吗?我在hivemq.com上读过,但找不到保留消息是在setWill options.setWill(client.getTopic(“home/LWT”),“我走了:(”.getBytes(),0,false);对吗?但是你提到过“您可以将具有订阅者的客户端id的有效负载的保留消息发布到lock/foo/bar"但是如果我不知道谁是客户呢?或者你的意思是什么?客户应该总是知道自己的客户idHi hardillb,是的,你的问题是对的。但是,还有什么好的选择呢?在另一篇文章中,我读到了关于向频道发送订阅事件的内容。然后我想,如果有人想要订阅,他需要知道是否有已经是订阅事件基本上我想说的是MQTToh不可能!我想我唯一的选择是保留消息和lwt,但我不知道如何克服这个问题,至少要同时避免订阅:/。你知道我在哪里可以找到使用保留消息的小实现,我在hi中读到vemq.com但我找不到保留的消息是在setWill options.setWill(client.getTopic(“home/LWT”),“我走了:(”.getBytes(),0,false);对吗?但是你提到“你可以发布一条保留的消息,其有效负载为订阅者的客户端id以锁定/foo/bar”,但是如果我不知道谁是客户端呢?或者