10

我想制作一个在 Internet 上运行的多人游戏,而不仅仅是像 LAN 这样的低延迟、高吞吐量环境。

在我的游戏的某些网络方面,UDP 显然更适合,例如传输有关不同玩家的位置和速度的信息。必须尽可能快地接收此数据,重新发送丢弃的数据包将无济于事,因为该数据在到达客户端时已无关紧要。丢弃一些数据包是完全可以的。

然而,我的游戏还有一些其他方面严格要求有序、有保证的交付。数据包的自动分段(分解并重新组合以获取大量数据)也将非常有用。似乎 TCP 完成了所有这些工作。除非数据严格有序并且没有丢失的数据包,否则数据根本没有用处。在某些情况下,此类数据的延迟不可避免地会受到影响,但这是不可避免的。

因此,与其在 UDP 之上实现类似 TCP 的功能(使用数据缓冲区、用数字标记数据包以确定它们的顺序、数据包确认系统),这将是大量工作以确保其正确有效地工作,我'想同时使用 TCP 和 UDP。

但是我听说如果同时使用TCP和UDP会互相争夺带宽,使用TCP会增加UDP丢包率。这是真的吗?混合这两种协议时,我还需要处理其他问题吗?

4

4 回答 4

2

您可以查看http://www.zeromq.org/,一个很好的开源智能传输层库。

于 2012-04-03T21:07:12.247 回答
0

如果你有困难,我建议在你和你的网络代码的胆量之间增加一个抽象层。尝试像“ RakNet ”这样的多人网络库。

于 2012-04-03T20:01:16.583 回答
0

通常 - 使用 TCP 不会增加 UDP 数据包的丢弃率。它宁愿反过来 - 大量的 UDP 流量会限制 TCP 流量,因为真正的流氓 UDP 实现会限制整个网络带宽 - 而 TCP 会尝试最大化感知带宽的吞吐量。因此,将它们一起使用不会真的伤害到您,只要您最终不会持续地在车站打到可用的黑白。超出此范围可能会导致一些缓冲延迟——如果 UDP 或 TCP 应用程序对延迟敏感,这将损害它们。希望有帮助。

于 2015-05-01T06:06:57.263 回答
0

Try iperf and you will see that if one TCP connection for download has to share a 100 Mb/s line with an application forcing 100 Mb/s UDP download traffic, then you will measure roughly a TCP throughput of 50 Mb/s and receive about half the number of sent UDP packets (i.e., a UDP drop rate of about 50%).

于 2017-09-27T10:47:37.817 回答