MQTT:订阅者能否异步向生产者发送数据?

物联网 MQTT
2021-05-31 03:31:36

场景 IoT 设备(当前为 IPv4 设备),每天通过 TCP 套接字向服务器发送一次有效负载。服务器有一个公共 IP 地址,设备位于路由器/NAT 后面。我将使用基于 ESP8266 的模块(即 Olimex 一个)

目标服务器应该能够将数据发送到任何客户端,只要它需要。我对直接客户端到客户端的通信(即从我的智能手机连接到设备)不感兴趣,就像打孔应该做的那样。

其他要求 IoT 设备可能会增长到数千个。他们的互联网连接由支持 4G 的路由器/调制解调器提供。

建议的解决方案 据我了解,一个常见的解决方案是 MQTT。客户端定期将数据发送到代理(即运行在托管服务器上的 Mosquitto),然后更新运行在同一服务器上的主 Web 应用程序。

问题 Web 应用程序是否可以在需要时通过代理向任何客户端发送数据?换句话说:订阅者能否将数据异步发送回特定的发布者(即无需等待下一次传输)?

1个回答

任何 MQTT 客户端都可以订阅和发布,它们之间没有区别(只有可能的 ACL 规则控制哪些用户可以做什么)。

也没有给定客户端向另一个客户端发送数据的概念。消息发布到主题,而不是其他客户端。没有什么可以阻止给定客户端订阅特定主题,然后其他客户端可以使用该主题向该客户端发送消息。

在发布有关主题的消息之前,也无需等待传入订阅。

MQTT v5 添加了请求/回复样式消息传递的概念,但它的实现方式是在消息中包含一个额外的主题字段。这个额外的主题可以被订阅者读取并用于发布回复消息。但它只是作为提示而不是硬性要求。

Web 应用程序可以通过 Websockets 使用 MQTT 连接到代理,并以与任何其他 MQTT 客户端相同的方式运行。