我想制作一个在 Internet 上运行的多人游戏,而不仅仅是像 LAN 这样的低延迟、高吞吐量环境。
在我的游戏的某些网络方面,UDP 显然更适合,例如传输有关不同玩家的位置和速度的信息。必须尽可能快地接收此数据,重新发送丢弃的数据包将无济于事,因为该数据在到达客户端时已无关紧要。丢弃一些数据包是完全可以的。
然而,我的游戏还有一些其他方面严格要求有序、有保证的交付。数据包的自动分段(分解并重新组合以获取大量数据)也将非常有用。似乎 TCP 完成了所有这些工作。除非数据严格有序并且没有丢失的数据包,否则数据根本没有用处。在某些情况下,此类数据的延迟不可避免地会受到影响,但这是不可避免的。
因此,与其在 UDP 之上实现类似 TCP 的功能(使用数据缓冲区、用数字标记数据包以确定它们的顺序、数据包确认系统),这将是大量工作以确保其正确有效地工作,我'想同时使用 TCP 和 UDP。
但是我听说如果同时使用TCP和UDP会互相争夺带宽,使用TCP会增加UDP丢包率。这是真的吗?混合这两种协议时,我还需要处理其他问题吗?