我有一个IoT网络,其中的设备互相发送数据,并将数据存储在数据库中。
如果我的设备按顺序发送10个数据包/ API请求,则有时只有少数几个到达其目的地。例如,数据包1、3和9可能到达其目的地,而其他数据包则未到达。
如何跟踪这些数据包并确保所有数据包都到达目的地而不会重复或泄漏?我预计现实生活中将有成千上万的设备,而不仅仅是丢包的设备。
我有一个IoT网络,其中的设备互相发送数据,并将数据存储在数据库中。
如果我的设备按顺序发送10个数据包/ API请求,则有时只有少数几个到达其目的地。例如,数据包1、3和9可能到达其目的地,而其他数据包则未到达。
如何跟踪这些数据包并确保所有数据包都到达目的地而不会重复或泄漏?我预计现实生活中将有成千上万的设备,而不仅仅是丢包的设备。
Answers:
通常,您将需要选择一个具有强烈保证的协议,以确保客户端是否将接收任何数据包/消息,以什么顺序接收以及是否允许重复。
对于相互发送中小型消息的IoT设备网络,将MQTT与服务质量2结合使用似乎很适合您的用例。如HiveMQ链接中所述:
最高的QoS为2,它确保每个消息仅由对方接收一次。这是最安全的,也是最慢的服务质量。保证是由那里的两个流以及在发送者和接收者之间返回的两个流提供的。
请注意,QoS 2 确实保留了消息的顺序,并且如上所述,可以防止消息重复。
与标准QoS 0(类似于即发即弃消息)相比,使用MQTT QoS 2 会产生大量开销(如果消息未到达代理,则消息不会重新发送并且永远消失了) )-QoS 2需要4条消息(PUBLISH
来自发送者,PUBREC
来自代理,PUBREL
来自客户端,PUBCOMP
来自代理),因此通常需要更长的时间来处理,占用更多的资源(因此更长的无线电传输和任何受约束的端点上的功耗都将增加)。
MQTT QoS 2消息将反复从发送方重新发送,直到收到来自代理的确认为止,因此即使您的连接不完善,最终您的消息也应该能够通过。
基于主题的发布-订阅协议是否适合您的用例,取决于您自己确定;维基百科的文章可能会帮助您获得一个想法。