我想制作一个多人在线游戏,可以在网络上运行,而不仅仅是像局域网这样的低延迟、高吞吐量环境。
我的游戏有一些网络方面需要处理,其中UDP明显更适合,比如传输各个玩家的位置和速度等信息。这些数据必须尽快接收到,重新发送丢失的数据包是没有用的,因为一旦客户端收到这些数据,它们已经失效了。有些数据包被丢弃是完全可以接受的。
然而,我的游戏还有其他一些方面,严格要求按顺序保证数据传递。对于大型数据的自动分段(将数据拆分成小块再组合)也非常有用。TCP似乎可以做到这一切。除非数据严格按顺序传递并且没有数据包丢失,否则数据是没有任何用处的。在某些情况下,这种类型的数据的延迟不可避免地会受到影响。
因此,我不想在UDP之上实现类似TCP的功能(使用数据缓冲区、标记数据包的编号以确定它们的顺序、数据包确认系统),因为这将是很多工作,需要确保其正确和高效。我想同时使用TCP和UDP。
然而,我听说如果同时使用TCP和UDP,它们会互相争夺带宽,使用TCP会增加UDP丢包的率。这是真的吗?在混合这两个协议时,我还需要处理其他问题吗?