MQTT/PAHO 阻塞直到客户端收到来自客户端的消息

MQTT/PAHO block until clientB has received message from clientA

据我所知,MQTT QOS 都是关于客户端 -> 代理传递协议,即 QOS 1 和 2 可以确保代理收到发布的消息。

Paho在此基础上做好了拦截; mqttClient.publish 将阻塞直到 QOS 定义协议完成 - 在客户端发布和代理之间。

但是,如果我让 clientA 发布要发送给 clientB 的消息,我该如何阻止直到 clientB 收到来自代理的消息?

例如:

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

简短的回答是你不知道

每个客户端都完全不知道是否有任何其他客户端订阅了任何给定主题,这是设计使然。 MQTT 是 Pub/Sub,不是点对点协议。 Pub/Sub 架构的部分要点是将发布者与订阅者完全分离

MQTT QOS 涵盖发布者到代理和代理到订阅者,但作为 2 个截然不同的步骤。第一段确保消息到达代理(对于 QOS 1 或 2),第二段确保消息到达任何订阅者。