我目前正在使用一种网络协议,其中包括一个客户端到客户端系统,可以自动发现当前本地网络上的客户端。
现在,我定期在255.255.255.255
上进行广播,如果客户端没有发出30秒,我认为它已经死了(然后离线)。目标是保持最新的客户端列表运行。它使用UDP运行良好,但UDP无法确保数据包已成功传送。因此,当涉及到网络的WiFi部分时,我有时会出现错误的积极情况。死客户目前我已经减少了两次广播之间的时间来解决问题(仍然效果不佳),但我发现这一点并不干净。
我能做些什么来保持"在线"客户没有假阳性的风险" ?
答案 0 :(得分:4)
为了最大限度地减少误报,由于数据包丢失,您应该稍微改变heartbeat
协议的逻辑。
不是每N
秒依赖单个数据包广播,您可以每隔N
秒一个接一个地发送3个或更多突发数据包。这是ping
和traceroute
工具遵循的方法。使用此方法可以显着降低同伴丢失通知的可能性。
此外,您可以指定应用程序可以承受的一定数量的丢失通知。此外,为了尽量减少使用无线网络丢包的可能性,请尽可能减小广播UDP数据包的大小。