javascript - 策略游戏服务器概念

标签 javascript node.js websocket webgl

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

我已经不知道什么是同步客户端的最佳概念。

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

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

您还有其他想法或改进建议吗?

谢谢!

最佳答案

基本上你必须在速度安全之间做出选择。

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

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

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

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

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

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

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

Multiplayer Game Programming Introduction

Real time strategy networking

Multiplayer Programming thread (old but still with many useful links)

Lag Compensation

Prevent Multiplayer Cheating

第一个链接在过去帮助了我很多,恕我直言仍然是该主题的最佳资源之一。

书籍

Multiplayer Game Programming

关于javascript - 策略游戏服务器概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7172719/

相关文章:

javascript - 数组中出现次数最多的或最先选择的

javascript - 如何删除 anime.js 中的元素?

node.js - 在 Express js 中无需密码即可检查 Active Directory

javascript - 如何在nodejs中维护事件循环的持久数据?

php - 如何使用 PHP 读取 TLS 证书 websockets?

javascript - jquery 等待 $.each 完成

javascript - 如何使用 javascript 获取特定 url 的 Facebook 分享数

node.js - udp(4) 和 udp(6) 有什么区别?

javascript - Socket.io 与 Node.js

scala - PlayFramework Websocket HTTP 状态