往返时间 (RTT)
Mirror 的 RTT 快速概述,以及如何在游戏中改进它。
理解 RTT
Mirror 在客户端和服务器端分别计算往返时间:
客户端可以在
NetworkTime.rtt中找到服务器可以在每个
NetworkServer.connection.rtt中找到(每个连接的值不同)
如果你想在游戏中显示 rtt,你可以使用我们的 NetworkPingDisplay 组件。
本地机器的 RTT
如果你在同一台计算机上运行我们的坦克演示,一个作为服务器,一个作为客户端,你会看到平均 rtt 大约为 8 毫秒:

这一开始可能看起来有些奇怪:虽然 8 毫秒并不多,但仍然不像你在本地计算机上期望的那么低。显然,数据包不需要 8 毫秒才能通过内存传输。
原因很简单:默认情况下,Mirror 的 NetworkManager.sendInterval 设置为 60 Hz。
这意味着网络更新每 16 毫秒发生一次(1 秒 / 60)。
RTT 消息可能在更新期间到达,或者在等待下一个更新的 16 毫秒内到达。
平均而言,这意味着每个 RTT 消息有 8 毫秒的等待时间。
这就是为什么上面的图片显示在本地计算机上大约为 8 毫秒的 RTT。
优化 RTT
60 Hz 的发送间隔是在带宽(发送频率越高,带宽成本越大)和 RTT 之间的一个合理折衷。如果你想要用更低的 RTT 换取更多的带宽:
将 sendInterval 增加到 120 Hz 或更高
确保 VSYNC 已禁用(如果你的屏幕运行在 60 Hz,Vsync 将限制你的更新频率为 60 Hz)
确保你的游戏运行速度足够快(如果你的 CPU 太慢无法达到 120 Hz,那么你的发送频率显然不能是 120 Hz)
通过极高的发送速率和帧率,我们可以轻松将 Tanks 演示的 RTT 降至 1-2 毫秒在我们的本地机器上。当然,在生产游戏中不建议这样做:

最后更新于
这有帮助吗?