IoT设备(当前为IPv4设备)每天通过TCP套接字向服务器发送一次有效负载。服务器具有公共IP地址,设备位于路由器/ NAT之后。我将使用基于ESP8266的模块(例如Olimex)
目标
服务器应能够在需要时将数据发送到任何客户端。
我对像打孔那样的直接客户端到客户端通信(即从我的智能手机连接到设备)没有兴趣。
其他要求
物联网设备可能会增长多达数千个。它们的Internet连接由启用4G的路由器/调制解调器提供。
建议的解决方案
据我了解,常见的解决方案是MQTT。客户端定期将数据发送到代理(即在托管服务器上运行的Mosquitto),代理随后又更新在同一服务器上运行的主Web应用。
问题
该Web应用可以在需要时通过代理将数据发送给任何客户端?换句话说:订户是否可以异步地将数据发送回特定发布者(即,无需等待下一次传输)?
#1 楼
任何MQTT客户端都可以订阅和发布,两者之间没有区别(只有可能的ACL规则控制哪些用户可以执行操作)。也没有给定客户端将数据发送到另一个客户端的概念。 。邮件发布到主题,而不是其他客户端。无需阻止给定的客户端订阅特定主题,其他客户端便可以使用该主题向其他客户端发送消息。
也无需等待传入订阅就可以在该客户端上发布消息。
MQTT v5添加了请求/答复样式消息传递的概念,但是它的实现方式是在消息中包括一个额外的主题字段。订阅者可以阅读此额外主题,并用于发布回复消息。但这只是一个提示,并不是硬性要求。
Web Apps可以在Websockets上使用MQTT连接到代理,并且行为与其他MQTT客户端相同。
评论
明确的答案。如果我正确理解,从代理的角度来看,IoT设备和Web应用都是“客户端”,可以根据需要充当发布者或订阅者。然后由我自己定义一个主题,例如,该主题允许主应用程序要求设备“立即”重新启动-“现在”是设备实际与代理交换数据的时间。
–马克
18年2月18日在10:44
是的,几乎涵盖了它
– hardillb
18年2月18日在10:45