我对UDP有疑问。对于上下文,我正在开发实时动作游戏。
我已经阅读了很多有关UDP和TCP之间的区别的文章,并且我对它们的理解非常好,但是其中有一件从未感觉过正确,那就是可靠性,尤其是致谢。我了解默认情况下UDP不提供可靠性(即数据包可能会被丢弃或乱序发送)。当需要某种可靠性时,我所见的解决方案(从概念上讲是有意义的)是使用确认(即服务器向客户端发送数据包,并且当客户端收到该消息时,它将确认发送回服务器)。 。
取消确认后会发生什么?
在上面的示例中(一台服务器向一个客户端发送数据包),服务器通过每帧重新发送数据包直到收到针对这些数据包的确认,来处理潜在的数据包丢失。您仍然可能会遇到带宽问题或消息混乱的情况,但是仅从丢包的角度来看,服务器已被覆盖。
但是,如果客户端发送了从未到达的确认,则服务器别无选择,只能最终停止发送该消息,如果需要该数据包中包含的信息,这可能会破坏游戏。您可以对服务器采取类似的方法(即一直发送确认,直到收到确认的确认?),但是这种方法会使您永远来回循环(因为您需要为确认而需要一个确认)等等)。
我觉得这里的基本逻辑是正确的,这给了我两个选择。
- 发送单个确认包,并希望最好。
- 发送少量确认数据包(可能是3-4个),并希望达到最佳状态,前提是并非所有数据包都将被丢弃。
这个问题有答案吗?我是从根本上误解了吗?是否可以保证使用我不知道的UDP?我对继续使用太多的网络代码感到犹豫,直到我对自己的逻辑是合理的感到满意为止。