战略游戏服务器概念

我打算创build一个基于WebGL的实时策略游戏,玩家可以一起玩。 我将使用Node.js来创build游戏服务器,以及用于实时连接的websocket。

我打破了什么是同步客户最好的概念。

一种可能性是仅将用户(移动单元,build筑物等)的订单发送到服务器,服务器将其发送到所有其他客户端。 但是在这里,我有延迟的问题。 我认为游戏会以这种方式获得asynchronous。

另一种可能性是在服务器上计算游戏。 客户端仍然向服务器发送指令,但是服务器现在将所有单元和build筑物的所有改变的状态以高的间隔发送给客户端。 问题是这里的数据量很大,速度有多快。

你有其他的想法或改进scheme吗?

谢谢!

基本上你必须决定速度还是 安全

让客户做这项工作,计算速度更快,但数据处于风险之中,因为客户可以操纵数据。

另一方面,让服务器做所有的工作比较慢,但数据更安全。

你可以select一个双重的方法,决定让客户端只计算一些数据,同步,然后检查其有效性,让其余的在服务器上执行。

这还取决于游戏的运行速度,计算的数据量,服务器的速度和频段/连接等等。

您应该原型化这两个方法,并尝试一些testing来模拟客户端和服务器负载。

如果游戏很小,我会select更多的服务器端工作。 另一方面,对于一个非常复杂的游戏来说,分享更多的工作给客户可能是最好的。 无论如何,我认为总是需要权衡。

以下是一些您可能会觉得有用的链接

多人游戏编程介绍

实时战略networking

多人编程线程(旧的,但仍然有很多有用的链接)

滞后补偿

防止多人作弊

第一个环节帮了我很多时间,imho仍然是这个问题上最好的资源之一。

图书

多人游戏编程

我build议观看这些关于基于浏览器的游戏开发概念的资源:

  • 多人游戏与HTML5:我们准备好了吗?
  • 实时HTML5多人游戏与Node.js
  • HTML5游戏0.3:看未来

不幸的是我没有基于WebGL的在线游戏的经验,但通常这是让游戏逻辑在客户端执行并同步结果的好方法。

在这个方法中,跟踪什么游戏对象是由什么客户“拥有”是很重要的。 客户端只从自己的对象发送更新(创build,更新,删除),并从其他客户端接收其他游戏对象的更新。

另外,你可以设置一个消息框架来传递像“玩家已经进入/离开”或类似的东西。

这个概念已经certificate对我创build的游戏有用,我希望它对你有用。

你应该在服务器上拥有游戏的状态和逻辑,否则你的游戏就会被欺骗。 服务器是游戏状态的最终权威。

不知道有关WebGL,但以我的理解以下方法将是很好的。

  1. 初始化服务器上​​的所有对象(这是在玩家间通用的)并运行它们
  2. 在客户端启动时,它将请求所有呈现器(与特定的客户端相关)在服务器上运行的对象。
  3. 客户端将为所有接收到的渲染器渲染UI上的对象。
  4. 当客户端在UI上进行更新时,更改将通知服务器,服务器将相应地更新对象
  5. 当一个玩家修改玩家之间的共同对象时,将通知每个玩家(客户)进行UI改变。

这种方法将特定于通用对象而不是UI /客户端特定对象。

出于安全原因,所有的逻辑应该在服务器端,所有的数据更新都在服务器上。

但客户端能够预测一些逻辑并首先播放animation,这就是客户端预测。

服务器端负责validation客户端逻辑,如果没有作弊,全部完成。 如果有人作弊,服务器可以告诉客户回到正确的状态。

如果您使用node.js作为服务器,则有一个开源框架柚子 。 还有一个完整的源代码演示和在线演示: lordofpomelo