【问题标题】:WebSockets performanceWebSockets 性能
【发布时间】:2011-11-18 08:19:03
【问题描述】:

我正在考虑实现一个 HTML5 mmog,其中涉及一个快速运行的对象。玩家不断通过射击来改变该物体的方向。我想到了 WebSockets 等 (socket.io) 和 canvas

我认为方向变化的计算必须在客户端和服务器端完成,然后与服务器同步,以避免作弊。

我担心的是,无论服务器有多快,延迟都会导致延迟,从而导致同步中断。

有没有解决这个难题的好方法?在所有信息对于不错过方向变化至关重要的情况下,如何实现这些数据量的实时同步。所有玩家都需要及时获取移动物体的新方向,以免破坏游戏玩法。

我认为这个问题已经在现有的 mmog 中解决了。

有什么想法吗?

【问题讨论】:

  • 您可以为每个操作发送一个时间戳,然后让服务器在适当的时间追溯插入该操作。 (这并不能完全解决您的问题,因为玩家可以通过更改时间戳来作弊,而玩家直到稍后才能看到更改。但是,它会减少延迟问题,并且您将无法传输数据无论你做什么都会立即。)
  • 基于客户端的时间戳永远不会准确。在我写这篇文章时,我的时钟是 2 分钟。
  • 主要问题是是否有一种方法可以实时同步大量数据,这些数据是从具有大量连接的小消息(球员射门/方向变化)聚合而成的。
  • 选择纯客户端-服务器。所以你只会询问用户关于鼠标位置、点击、按键和类似的东西 - 并计算和同步服务器上的一切
  • 您有过这方面的经验吗?是否可以设法让这么多的实时数据准确同步?

标签: html canvas websocket multiplayer


【解决方案1】:

在这种情况下,您可以做的最好的事情是尝试在客户端预测运动(航位推算),然后在必要时使用来自服务器的数据更正位置/速度。

例如,假设您快速运行的对象以 5 的速度在屏幕上从左向右移动,玩家向它射击并改变方向,因此它现在以 5 的速度在屏幕上向上移动( 90 度转弯)。

客户端应用程序的更新频率可能远高于它从服务器获取数据的频率(例如,客户端每秒更新 60 个,服务器每秒接收 10 个数据包)。假设,在服务器更新到来之前,对象实时改变了方向,还剩 5 帧。在客户端,对象将继续沿其当前轨迹移动,直到它从服务器接收到它改变方向的更新(即它不会在没有从服务器接收数据时停止),此时,客户端将校正对象的位置和速度。

您如何进行校正将决定动画看起来有多跳跃。您可以立即将其移动到正确的位置,从而引起一点跳跃,但立即给出正确的位置,或者您可以改变它的速度,使其平滑地移动到该位置,不会导致跳跃,但有在校正期间的位置稍微不准确。

在某些情况下,这些修正最终会变得非常大(例如,某人的连接非常糟糕、丢包、超高延迟等)。这就是人们通常所说的网络游戏滞后的疯狂异常现象,例如当一个物体跳过很长的距离或移动得非常快以“赶上”它应该在的位置时。没有办法始终保持 100% 同步。你所能做的就是很好地猜测事情应该在哪里。

这里有一些更详细的文章,祝你好运!

http://gmc.yoyogames.com/index.php?showtopic=415538 http://www.gamasutra.com/view/feature/3230/dead_reckoning_latency_hiding_for_.php

【讨论】:

【解决方案2】:

服务器是同步所有事件的正确位置。您不希望每个玩家将其输入数据发送给其他“n”个玩家,因为这会创建太多的通信路径。

服务器将获取玩家数据并确定移动物体的新轨迹,然后向每个玩家发送更新。这可以以固定的虚拟游戏时间单位来完成,我将其称为“滴答声”。

从服务器的角度来看,这会为您提供如下循环:

  1. 接收玩家的输入
  2. 更新游戏状态
  3. 将游戏状态更改分发给玩家

您将需要处理诸如在一定时间内未收到玩家输入的情况(例如,可能在该帧中忽略该玩家)。

在客户端,当您等待来自服务器的下一个游戏时间更新时,您可以继续沿着之前的轨迹移动对象,随着时间的推移渲染帧。

当从服务器接收到当前游戏时间的更新时,必须应用新的游戏状态。

如果对象的新实际位置非常接近您推断的位置,您可以设置新位置并在下一帧渲染它。

如果新位置距离外推位置“很远”,那么您需要决定是立即将对象扭曲到目的地,还是进行某种加速或线性运动以在短时间内将其移动到那里。

【讨论】:

    猜你喜欢
    • 2011-09-11
    • 2015-05-30
    • 1970-01-01
    • 2018-05-18
    • 1970-01-01
    • 2016-06-26
    • 2018-04-26
    • 2011-09-15
    • 2020-02-14
    相关资源
    最近更新 更多