我们有一个与服务器通信的UDP客户端。
服务器对每个请求给出一个响应。
客户端发送请求,等待5秒钟响应。
如果5秒钟内未收到服务器的响应 - 客户端认为数据包在网络中丢失(这是UDP ...),将报告写入日志,并发送下一个请求
但是,有时我们在网络上有任何延迟,服务器的响应会在5秒后发生。
让我们描述一下这个场景:
客户端发送了一个名为" X"。
的数据包5秒的超时到期,客户端报告" X"是一个丢失的数据包。
客户端发送了另一个名为" Y"。
的数据包服务器对" X"的响应现在来到客户端。
客户端发现响应与请求不兼容,并将其报告给日志。
客户端发送了另一个名为" Z"。
的数据包服务器对" Y"的响应现在来到客户端。
客户端发现响应与请求不兼容,并将其报告给日志。
这是一个无限循环!
我们能做什么?
答案 0 :(得分:0)
许多基于UDP的协议包括一个标识符,用于指示给定响应属于哪个请求。客户端选择标识符并将其作为请求的一部分发送到服务器,然后服务器在响应中回送它。这允许客户端匹配对请求的响应,尤其是在您描述的情况下。如果客户在继续之后收到了X
的回复,则可以简单地忽略该回复。