多个物联网设备通过 TCP 异步通信到服务器

问题描述

我希望多个 IoT 设备(比如 50 个)通过 TCP 直接异步地与服务器通信。假设它们每 30 秒都有一个心跳脉冲,并且可能会在不同的时间断开并重新连接。

谁能告诉我在多个设备同时通信时确保不会丢失或阻止数据的最佳方法吗?

解决方法

TCP 本身确保在客户端和服务器之间的通信过程中不会丢失数据。它通过使用序列号和 ACK 消息来做到这一点。

从技术上讲,在实际数据传输发生之前,会在客户端(可以是 IoT 设备或任何其他设备)和服务器之间创建 TCP 连接。然后,数据被分成多个数据包并通过该连接在网络上发送。所有与 TCP 相关的机制,如流量控制、错误检测、拥塞检测等,都会在数据开始流动时发生。

如果您想详细了解 TCP 的工作原理,TCP 的 wiki page 是一个很好的开始。

除此之外,只要您的服务器有足够的容量来支持来自设备的请求流,那么一切都应该可以正常工作(至少在理论上是这样)。

,

我认为您问的问题不正确。没有办法确保没有数据被丢弃或阻塞。网络并不总是有效(这就是为什么在网络中使用 work 这个词来说服你)。

正确的问题是:如何使我的分布式系统尽可能可用和可靠?答案包括将中断和拥塞视为正常操作的一部分,并适当地构建您的软件。

有一个永恒的usenix/acm/? 70 年代末 80 年代初的论文激发了端到端协议比功能过多的中到中间协议更有效的观点;并且大多数中间到中间的保证相当于尽力而为。如果你依赖这些保证,你注定会失败。抱歉,目前找不到参考文献,但被广泛引用。