Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.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
MQTT:如何知道何时收到所有保留的消息_Mqtt_Iot - Fatal编程技术网

MQTT:如何知道何时收到所有保留的消息

MQTT:如何知道何时收到所有保留的消息,mqtt,iot,Mqtt,Iot,订阅MQTT主题(可能包括通配符)后,是否有方法确保已收到订阅主题的所有保留消息 (更准确地说:所有存储的消息都会在订阅时保留在代理中的消息) 如果没有直接的方法,是否有黑客知道它(比如向订阅的主题发送具有特定QoS的新保留消息,这肯定是在旧消息之后收到的) 我的问题的背景是我想要实现的这个特性请求() 因此,这将是arduino(ESP8266)使用AsyncMQTT库的参考实现,但我的问题通常也适用于其他实现(例如使用paho mqtt等) 简短的回答是否定的 客户机无法知道什么主题在任何时

订阅MQTT主题(可能包括通配符)后,是否有方法确保已收到订阅主题的所有保留消息

(更准确地说:所有存储的消息都会在订阅时保留在代理中的消息)

如果没有直接的方法,是否有黑客知道它(比如向订阅的主题发送具有特定QoS的新保留消息,这肯定是在旧消息之后收到的)

我的问题的背景是我想要实现的这个特性请求()

因此,这将是arduino(ESP8266)使用AsyncMQTT库的参考实现,但我的问题通常也适用于其他实现(例如使用paho mqtt等)

简短的回答是否定的

客户机无法知道什么主题在任何时候都可能有保留的消息等待着他们,更不用说在订阅时独自一人了

你能做的唯一一件事就是确保你在QOS为1或2时订阅,这时代理会尽一切努力将它们交付给你


唯一的迹象是第一个无保留消息的到达,因为代理应该(我认为)在任何新消息之前交付所有保留的消息。但是,如果对该主题的任何更新都可能被标记为保留,并且可能没有帮助,那么您将需要一条关于不同主题的(无保留)消息来获得感觉。

如果您的代理支持
$SYS
类似主题,或者您可以订阅
$SYS/+/new clients
(适用于Aedes)在客户端连接时收到消息,因此,根据@hardillb answer,当您收到该消息时,意味着所有保留的消息都已收到,因为它们将在所有保留后发送。

我将尝试一下。