【问题标题】:Losing data with UDP over WiFi when multicasting多播时使用 UDP over WiFi 丢失数据
【发布时间】:2015-02-13 16:45:59
【问题描述】:

我目前正在使用一种网络协议,其中包括一个客户端到客户端系统,可以自动发现当前本地网络上的客户端。

现在,我定期在255.255.255.255 上进行广播,如果客户端在 30 秒内没有发出,我认为它已死(然后离线)。目标是保持最新的运行客户端列表。它使用 UDP 运行良好,但 UDP 不能确保数据包已成功传送。因此,当涉及到网络的 WiFi 部分时,我有时会对死去的客户进行“虚假陈述”。目前我已经减少了两次广播之间的时间来解决这个问题(仍然不能很好地工作),但我觉得这并不干净。

我可以做些什么来保留“在线”客户列表而不会有这种“误报”的风险?

【问题讨论】:

  • 时间周期的一半并在 TCP 上运行
  • TCP 是一种单播协议。一半的时间段是我目前所做的,但我想要更可靠的东西。

标签: udp broadcast


【解决方案1】:

为了最大限度地减少误报,由于丢包,您应该稍微改变heartbeat 协议的逻辑。

您可以每隔N 秒一个接一个地立即发送一个突发的 3 个或更多数据包,而不是依赖于每 N 秒的单个数据包广播。这是ping 和traceroute 工具遵循的方法。使用这种方法,您可以显着降低对等点丢失通知的可能性。

此外,您可以指定您的应用程序可以承受的一定数量的丢失通知。另外,为了尽量减少使用无线网络丢包的可能性,尽量减少广播UDP数据包的大小。

【讨论】:

  • 这就像每隔N 秒就有一个“高峰期”。谢谢你。 (我会尽快提供赏金)。
【解决方案2】:

你可以把它翻过来,这样你就会广播“ServerIsUp”消息 并且每个客户端都可以在服务器上注册。当客户端下线时,它会注销,否则你可以认为它是活着的。

【讨论】:

  • 我使用的是客户端到客户端的架构。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-04
  • 2019-07-03
  • 2015-06-30
  • 1970-01-01
  • 2019-01-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多