如何在 MQTT 中实现请求?

How to implement a request in MQTT?

有一个物联网服务器只支持MQTT协议,为了从服务器获取数据,管理员分享了下面的代码

mosquitto_sub -v -t "app/26" -h broker.example.com -p 1883  -u "dir1-mqtt" -P "5sp-1001-tech

其实我也不知道怎么处理。

我怎样才能将该请求发送到目标并以最快的方式获得响应?

简短的回答是,你没有。你的MQTT型号错误。

MQTT 不是 request/response 模型* 例如与 HTTP 一样,它是一种 publish/subscribe (pub/sub) 消息传递模型。在 pub/sub 模型中,数据生产者向主题发布消息,该主题可能有 0 到 N 个订阅者,发布者无法知道有多少订阅者(而且真的不应该关心).

这意味着您接收数据所需要做的就是订阅所提供的主题(在本例中 app/26),当有新数据时,它将被传送给您的客户。

有一些选项可确保您在订阅时始终收到最后发布的消息。这是通过生产客户端在消息中设置保留位 header 来完成的,这将导致代理保留此消息并在订阅主题时首先将其传递给所有客户端。在该主题上设置此位的下一条消息将替换之前的消息。但这是由生成数据的客户端控制的,而不是消费者。

* 您可以使用单独的主题实现 request/response,MQTT v5 有一个额外的 header 来指定响应主题。但是要求生成数据的客户端期望收到关于给定主题的请求并能够回复所提供的主题。