我正在研究一个学习node.js的项目,并正在寻找有关如何实时处理用户数据同步的建议。

假设您有一个2D矩形 map (大约600x400),许多玩家在该 map 上占据x,y位置。每个用户都可以使用箭头键浏览并以某种基本方式与其他用户交互。假定可以通过HTTP进行播放,那么在处理和同步用户数据以提供最流畅,最生动的体验方面,最佳的设计模式是什么?

我可以考虑几种选择,但希望您能提供更多的想法/说明:

  • 客户端将位置数据发送到服务器,服务器将所有位置分配给所有客户端,并显示结果屏幕。重复。不利的一面是客户端被数据往返所花费的时间所滞后,但不利的一面是它们与所有用户同步。
  • Client渲染其认为恒定的位置,将位置数据发送到服务器,服务器将所有位置分配给所有客户端,然后使用服务器数据校正来自客户端数据的屏幕渲染。上行是一个较快的响应,下行是轻微的同步丢失。
  • 两者的混合,但不是使用(x,y)坐标,而是使用[先前x / y和时间,当前x / y和时间,在时间间隔建议x / y]的 vector 用于绘制不断变化的弹道。似乎很难实现。

  • 有指针吗?

    最佳答案

    大多数游戏使用某种形式的航位推算http://en.wikipedia.org/wiki/Dead_reckoning,它允许从服务器分发延迟的更新,但保留了客户端上实时更新的一些幻觉。

    最好的选择是3。并不是特别复杂-只是根据游戏的机制跟踪每个 Actor 的位置,并在收到服务器的更新后,随着时间的推移使这两个状态保持一致。

    如果您发现服务器向您发送的状态与客户端所假定的状态相差太远(需要定义太多),则您可能只是跳到服务器状态并接受客户端的不连续性。

    07-27 23:07