我有一个设备互相连接的IoT网络,数据存储在数据库中。 。例如,数据包1、3和9可能到达目的地,而其他数据包未到达目的地。

如何跟踪这些数据包并确保所有数据包都到达目的地而没有重复或泄漏?我希望现实生活中会有成千上万的设备,而不仅仅是丢包的设备。

#1 楼

通常,您需要选择一种具有强烈保证的协议,以确保客户端是否将接收任何数据包/消息,以何种顺序以及是否允许复制。使用具有服务质量2的MQTT来将大小适中的消息彼此传递在一起似乎很适合您的用例。如HiveMQ链接中所述:最高QoS为2,它保证每个消息仅由对方接收一次。这是最安全的,也是最慢的服务质量。保证是由两个流在发送者和接收者之间来回提供的。


请注意,QoS 2确实保留了消息的顺序,并且如上所述,可以防止消息重复。

与标准QoS 0相比,使用MQTT QoS 2会产生大量开销(类似于即发即弃消息;如果未到达代理,则消息不会不会重新发送并永远消失)-QoS 2需要4条消息(发件人PUBLISH,代理PUBREC,客户端PUBREL,代理PUBCOMP),因此通常需要更长的处理时间,需要更多的资源(因此无线电更长)

MQTT QoS 2消息将反复从发送方重新发送,直到它收到来自代理的确认为止,因此即使您的消息通过了,即使您的连接不完美。

您可以确定基于主题的发布-订阅协议是否适合您的用例。维基百科的文章可能会帮助您获得一个想法。

评论


感谢@ Aurora0001的工作和回复。任何基于HTTP协议的消息通信/异步机制,或基于IP数据包的机制,还是可以说是一招又忘了?假设有一个场景-系统A向系统B发送消息。在系统A中,创建/准备按5、1、2、3、4、5之类的顺序发送5条消息。在系统B中收到类似-1,4,5的消息。在这里,系统B错过了2 3的记录/数据包/数据。因此,使用最小的行程/带宽/网络,可以在系统A-B之间进行同步而又不会丢失,没有重复记录的机制是什么?

–user1467280-Satyajit真相
17年8月8日在5:49