多播时通过 WiFi 使用 UDP 丢失数据

Losing data with UDP over WiFi when multicasting

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

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

我可以做些什么来保留 "online" 客户的列表,而不会有 "false positives" 的风险?

你可以把这个翻过来,所以你会广播"ServerIsUp"消息 每个客户端都可以在服务器上注册。当客户端下线时会注销,否则你可以认为它还活着。

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

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

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