好的多人/ mmo客户端<>服务器游戏是否在运动计算中使用延迟?

Tom*_*Tom 3 synchronization latency multiplayer roundtrip

这里有几个问题.

想象一下,我有客户端A将要向服务器发送以下消息:"START START VVEMENT FORWARD".

服务器不会立即收到此消息,因为延迟会导致延迟.

问题1:ping(或更好:往返时间)是客户端向服务器发送消息并接收响应所需的时间.如果您可以忽略服务器注意到它已收到消息并开始发送响应(这应该非常短)所需的时间,这是否意味着以下内容?

  1. 客户端向服务器发送一些内容所需的时间=往返时间/ 2
  2. 服务器向客户端发送内容所需的时间=往返时间/ 2

因此,当客户端A发送该消息时,服务器将在客户端发送消息后的往返时间/ 2毫秒内接收该消息.这引出了我的下一个问题.

问题2:如果客户端首先发送包,然后在实际执行客户端命令(在这种情况下:向前移动)之前等待往返时间/ 2毫秒以补偿延迟/延迟?

现在,服务器将向所有附近的玩家发送以下消息:"客户端A现在正在向前移动".然后,这些客户端将确保客户端a的角色开始移动,这将引导我进入下一个问题.

问题3:客户端是否应该收到其他客户端已移动的消息,并考虑到此消息是由服务器往返时间/ 2毫秒发送的?那么用于运动计算时间戳的当前时间应该减少往返时间/ 2?

在我看来,所有这些方法都会确保客户端之间的同步得到改善,因为延迟会被考虑在内.这是正确的做事方式吗?大多数其他好的多人游戏都这样做吗?您想提供的任何评论,建议,替代方案或随机但相关的呼喊?提前致谢.

Jon*_*s B 8

我认为在大多数mmo中你的客户主要是在没有与服务器交互的情况下移动,除非出现严重的延迟.服务器借助客户端发送到服务器的消息再现移动.因此,如果服务器滞后,客户端将停止接收来自服务器的反馈并恢复到服务器确定您所处的位置.这就是为什么你会在糟糕的滞后期间跳回几帧.这样服务器也可以控制你的速度,这样你就不会速度快.如果您的客户端以超过服务器确定的速度的特定速率移动,您只需跳回额外的帧.

如果没有来自服务器的响应,其他客户端将在一定时间内完全不让您移动.这是你经历"冻结滞后"的时代.

当然,也存在服务器只是采取客户端发送的位置并盲目信任它的情况.这些游戏通常容易受到传送黑客攻击.

当涉及到其他玩家的位置时确实存在延迟,如果你拿两台电脑,连接到诸如哇的游戏并同时移动两个角色就可以看到.您会看到,在您开始移动他之后,非本地角色将在两台计算机上开始移动.

客户通常会有某种滞后补偿.因此,如果另一个玩家朝某个方向移动然后停止,您的客户仍将模拟该玩家的移动,直到您从服务器收到他改变方向或停止移动的消息.这就是为什么其他玩家可以在ping高时来回跳转的原因.这也是为什么当你的客户从服务器接收位置时,当你遇到lagspikes然后回到他们的真实位置时,玩家似乎只是滑动/跑/走.

当然,这从发动机变为发动机,但这是一个相当普遍的方法.

编辑:忘记添加服务器也使用滞后补偿是很常见的.如果你遇到某个mmo范围内的人,那么该人可能不在服务器视图的范围内.因此,服务器会为您的客户端延迟延迟,并尝试匹配,如果您真的在彼此的范围内.