【发布时间】:2012-04-17 12:43:57
【问题描述】:
我想制作一款可以在 Internet 上运行的多人游戏,而不仅仅是 LAN 等低延迟、高吞吐量的环境。
在我的游戏的某些网络方面,UDP 显然更适合,例如传输有关不同玩家的位置和速度的信息。必须尽可能快地接收这些数据,并且重新发送丢弃的数据包将无济于事,因为该数据在到达客户端时已无关紧要。丢弃一些数据包是完全可以的。
但是,我的游戏还有一些其他方面严格要求按顺序、有保证的交付。数据包的自动分段(分解并重新组合成大块数据)也将非常有用。似乎 TCP 完成了所有这些工作。除非数据严格有序并且没有丢失的数据包,否则数据根本没有用处。在某些情况下,此类数据的延迟不可避免地会受到影响,但这是不可避免的。
因此,与其在 UDP 之上实现类似 TCP 的功能(使用数据缓冲区、用数字标记数据包以确定它们的顺序、数据包确认系统),这将是大量工作来确保其正常工作和高效,我想同时使用 TCP 和 UDP。
但是,我听说如果同时使用 TCP 和 UDP 会互相争夺带宽,使用 TCP 会增加 UDP 丢包率。这是真的吗?混合使用这两种协议时,我还需要处理其他问题吗?
【问题讨论】:
-
一切都在为带宽而战。
-
@Mat 好吧,是的,但我听说 TCP 上的 100kb/s 或 UDP 上的 100kb/s 将比每个 50kb/s 具有更高的吞吐量和更少的延迟。
-
@newprogrammer 你在哪里“听说”过?请引用。
标签: networking tcp udp