我只是想知道RUDP是否比TCP更有优势,这样我才能决定是否添加RUDP支持。
我们确实需要最终同步状态(但我们不关心通过所有中间状态);这在模拟中是非常常见的情况。这可以在UDP上实现(并且不会产生HOL阻塞惩罚)。然而,启用非可靠连接上的压缩并不简单,而大多数游戏都必须使用压缩。幸运的是,这种压缩是可行的(请参见http://gafferongames.com/networked-physics/snapshot-compression/和/或http://ithare.com/udp-from-mog-perspective/#low-latency-compression进行讨论)。如果实施此方法(可以在完全不可靠的数据包之上完成),它将比TCP提供非常显著的改进(它确实消除了HOL阻塞,因此我们说的是网络滴答声的延迟 - 这可以低至1/120秒约8毫秒 - 而这些对于一个单独的丢失数据包的延迟至少为100毫秒)。
附言:
实际上,可以模拟UDP over TCP (消除TCP延迟)- 请参见http://ithare.com/almost-zero-additional-latency-udp-over-tcp/。注意,要利用它,仍然需要手动完成上述所有工作。仍然没有解决可靠排序流避免HOL阻塞的神奇方法;相反,这种技术允许使几个TCP连接表现得“几乎像”是不可靠但非阻塞的UDP。
这个问题涉及到乱序数据包。
经过调查,我了解到问题在于TCP想要掌控所有接收到的数据包,直到它们按照应用程序期望的顺序被接收。这可能对一个相当大的多人游戏的性能产生不良影响,因为您只关心最新的玩家位置,而不是几毫秒前它们出现在哪里。
RUDP改变了这一点,正如Unity的Erik所说,它只提供了"最新的数据包":
Erik-Juhl @ Unity Technologies
人们选择 UDP/RUDP 而不是 TCP 的主要原因是因为 TCP 处理失序数据包的方式。你可能只关心最近接收到的数据包并希望尽快获取它。在 TCP 中,如果最近接收到的数据包不是下一个顺序的数据包,TCP 将不会将其传递给你,直到所有其他数据包都被接收到。Reliable UDP (RUDP): The Next Big Streaming Protocol?
来回答您的问题:我对这些协议了解不多,但根据我的现有知识,TCP是一种面向连接的协议,而UDP是一种无连接的协议。由于UDP不会尝试进行错误恢复,因此UDP在大多数实时在线多人游戏中使用得比较频繁。在这些游戏中,UDP之所以被使用,是因为可靠性并不是非常关键。TCP会采取措施确保客户端接收到所有发送的数据包,而UDP则只是发送它们而不检查是否已经接收到。如果我说错了,请纠正我!