Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 战略游戏服务器概念_Javascript_Node.js_Websocket_Webgl - Fatal编程技术网

Javascript 战略游戏服务器概念

Javascript 战略游戏服务器概念,javascript,node.js,websocket,webgl,Javascript,Node.js,Websocket,Webgl,我计划创建一个基于WebGL的实时战略游戏,玩家可以一起玩。我将使用Node.js创建游戏服务器,并使用WebSocket进行实时连接 对于同步客户端的最佳概念,我已经打乱了主意 一种可能是只将用户的命令(移动单元、建筑等)发送到服务器,服务器将它们发送到所有其他客户端。但在这里,我有一个延迟的问题。我认为游戏会以这种方式变得异步 另一种可能是在服务器上计算游戏。客户机仍然向服务器发送指令,但服务器现在以较高的间隔向客户机发送所有单元和建筑的所有更改状态。这里的问题是数据量大,速度有多快 您是否

我计划创建一个基于WebGL的实时战略游戏,玩家可以一起玩。我将使用Node.js创建游戏服务器,并使用WebSocket进行实时连接

对于同步客户端的最佳概念,我已经打乱了主意

一种可能是只将用户的命令(移动单元、建筑等)发送到服务器,服务器将它们发送到所有其他客户端。但在这里,我有一个延迟的问题。我认为游戏会以这种方式变得异步

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

您是否有其他想法或改进建议


谢谢

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

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

此外,您还可以设置一个消息传递框架来传递其他消息,如“玩家已进入/离开”之类的消息


这个概念已经被证明对我创建的一个游戏很有用,我希望它对你也同样有用。

基本上你必须在速度安全之间做出决定

让客户机完成工作和计算速度更快,但数据存在风险,因为客户机可以操纵数据

另一方面,让服务器完成所有工作的速度较慢,但数据更安全

您可以选择双重方法,决定让客户机只计算一些数据,同步并检查其有效性,然后让其余数据在服务器上执行

它还取决于游戏运行的速度、要计算的数据量、服务器和带宽/连接的速度等

您应该对这两种方法进行原型化,并尝试一些测试来模拟客户端和服务器负载

如果游戏很小,我会选择更多的服务器端工作。另一方面,对于一个复杂得多的游戏来说,与客户分享更多的工作可能是最好的。无论如何,我认为总是需要一个折衷方案

这里有一些你可能会觉得有用的链接

第一个链接在过去帮助了我很多,imho仍然是关于这个主题的最好的资源之一

书籍


我不确定WebGL,但据我所知,以下方法会很好

  • 初始化服务器上的所有对象(在所有玩家中都是通用的)并运行它们
  • 在客户端启动时,它将为服务器上运行的对象请求所有呈现程序(与特定客户端相关)
  • 客户端将在UI上为所有接收的渲染器渲染对象
  • 当客户端在UI上进行任何更新时,更改将通知服务器,服务器将相应地更新对象
  • 当一个玩家修改玩家之间的公共对象时,将通知每个玩家(客户端)进行UI更改

  • 此方法将特定于普通对象,而不是UI/客户端特定对象。

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


    你应该在服务器上有游戏状态和逻辑,否则你的游戏很容易作弊。服务器是游戏状态的最终权威。

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

    但是客户端能够预测某些逻辑并首先播放动画,这称为客户端预测

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

    如果您对服务器使用node.js,那么有一个开源框架。 还有一个完整的源代码演示和在线演示: