2015-09-25 34 views
0

從我所知道的情況來看,MQTT QOS都是關於客戶端 - >代理交付協議,即QOS 1和2可以確保代理收到已發佈的消息。MQTT/PAHO塊直到clientB收到來自客戶端A的消息

帕霍根據這個基礎做好阻塞; mqttClient.publish將阻止,直到QOS定義的協議完成 - 在客戶端發佈和代理之間。

但是,如果我有clientA發佈消息給clientB,我怎麼才能阻止,直到clientB收到來自broker的消息?

如:

ClientB->Subscribe("peer-device/ClientB/application/message") 
ClientA->Publish("peer-device/ClientB/application/message") 

回答

0

簡單的答案是你不

每個客戶機都有完全不知道是否有任何其他客戶端訂閱任何給定的主題,這是由設計。 MQTT是Pub/Sub,而不是點對點協議。 Pub/Sub架構的一部分是將發佈者與訂閱者完全分離

MQTT QOS涵蓋了發佈者到代理商和代理到訂閱者,但是作爲兩個截然不同的步驟。第一段確保消息到達代理(對於QOS 1或2),第二段確保消息到達任何訂閱者。

+0

...所以我不得不寫我自己的阻塞機制,對嗎? – pstanton

+0

如果你想要端到端阻塞,那麼是的,但我會試圖尋找一個特定的點對點協議,而不是強迫某個解耦的協議上的東西 – hardillb

+0

我已經使用'commandId'以及使用相同ID回覆的消息。現在這些似乎足夠可靠/有效。謝謝。 – pstanton

相關問題