多客户端通信,数据同步,适用于时间敏感型应用

Multiple clients communication with data synchronization for time-sensitive application

提问人:Shuj 提问时间:3/13/2023 最后编辑:James ZShuj 更新时间:3/13/2023 访问量:34

问:

我正在开发一个时间敏感的应用程序,其中多个客户端以大约 30Hz 的速率向服务器传输数据包。 来自每个客户端的数据包都使用一些升序时间戳进行编号。不同的客户端将产生相同的 ts。 事实上,服务器首先需要做的是将共享相同 ts 的数据包组合到单个数据帧中,然后再执行任何其他操作。

服务器可以暂时丢失一点数据,或者一个不完整的帧(例如,3个客户端发送了数据包,但只收到了其中两个)。 此外,服务器希望有效地处理通信。即使某些客户端关闭或出现锯齿状一段时间,服务器仍然可以正常运行。

有关应用要求的一些详细信息:

  1. 该算法需要递增的帧作为输入。并且将跳过具有较低 ts 的帧。我们希望尽可能少地跳过帧,同时保持实时性。
  2. 无需对每个数据包进行 ACK 或重新传输数据包,因为该算法可以容忍这种情况。
  3. 每当有数据包准备处理时,都应该将它们组合成一个帧,并尽快传送到算法中。
  4. 如果某些帧不完整,我们可以等待一小段时间,以防某些数据包仍在传输中。但是,如果它超过了时间限制,我们可以将其视为丢失的数据包以提高效率。
  5. 可以假设每个数据包都可以安全地封装在常规 UDP 数据包中。
  6. 该应用程序在 LAN 中运行,因此单个数据包的 RTT 会很小。

我的解决方案和遇到的问题:

到目前为止,我已经尝试使用 UDP 实现此服务器端代码,并使用缓冲区来存储从 UDP 接收的每个未处理的数据包。 我只是定期检查一些数据包是否已到达,并提取那些具有最小 ts 的数据包。如果它们可以形成一个完整的框架,请将它们组合在一起。或者,只需在 5 毫秒后再次检查,看看它是否完成。 但是,如果选择的检查缓冲区时机不佳,数据包仍可能丢失。例如,假设应用程序已确定缺少不完整的帧。然后就把它送出去了。然后丢失的部分就到了。在这种情况下,将生成两个不完整的帧,尽管数据包都已传送。 我试图通过在检查缓冲区时添加随机性来解决这个问题。但这可以更优雅地处理吗?

任何想法、经验、框架或代码将不胜感激。谢谢:)

网络编程 UDP 实时 服务器端 数据同步

评论


答: 暂无答案