MQTT 中的 Request/Response 是否可以实现单次呼叫、多次应答模式?

Is the Single Call, Multiple Answer Pattern possible with Request/Response in MQTT?

在单呼叫多应答模式中,您可以发送一个请求并收到多个对此请求的响应。 mqtt 客户端可以发送带有响应主题和一些相关数据的请求。一个客户端可以用多个响应来回答此请求(每个响应都包含第一个也是唯一一个请求的相关数据),还是这是一个协议错误?

MQTT is a Publish/Subscribe protocol, very much different from requenst/response protocols like HTTP.

经纪人是所有客户的middle-man。它将发布的消息分发给订阅其主题的所有客户端。

所以您可以做的是让客户端 "Master" 发送到主题 "REQUEST/" 并让您的所有从属程序订阅该主题。如果他们收到一条消息,他们可以将他们的回复发布到主订阅的 "RESPONSE/"。主人将调用它的 on_message 回调对于到达它之前订阅的主题的每条消息。

查看您选择的实施示例的 github。这里是 eclipse-paho-python-github.

编辑:

对于 MQTT5 添加了 response-topic-property。这里 publisher/requester 可以传递有关在何处发布响应的信息,而不是将其编码在有效负载中,这是现在的做法。它似乎并没有真正改变工作流程。而不是响应者 hard-coding 他们的主题或从有效负载中读取它,他们可以将其提取为他们收到的消息对象的一部分。