node.js - 使用 node.js 作为游戏服务器来跟踪游戏状态

标签 node.js networking

我正处于移动多人实时游戏的规划阶段,我正在考虑实现何种架构以跟踪游戏大厅内的状态。

我考虑过让游戏成为点对点游戏,在这种情况下,同一游戏大厅(最多 4 名玩家)内的所有设备都会随着游戏的进行向其他玩家发送他们的位置。我还考虑过让玩家连接到服务器,服务器跟踪游戏状态并将状态发送给每个玩家。

如果我真的走这条路并使用 Node 实现服务器,我需要考虑哪些注意事项?

我预测可扩展性将是一个主要问题,因为服务器必须跟踪每个名义上以 60 fps 运行的游戏大厅的状态。如果我有 100 个活跃的游说团体,我可以预见可能出现的问题。会是这种情况吗?我应该研究不同的网络架构吗?还是在服务器达到最大值之前我可以获得大量容量?

最佳答案

很大程度上取决于游戏的类型。 点对点解决方案可能很棘手,作弊也很容易,除非你在每个客户端上验证它,但由于你想在移动客户端上运行它,这会大大降低游戏速度。

在中央服务器上验证数据并发送验证数据更有意义。

一般来说,FPS 对服务器来说根本无关紧要。 每个客户端只是将用户输入发送到服务器,而不是每一帧 (按下按钮 - 释放按钮)。 服务器使用所有这些信息并计算需要发生的事情并向客户端发送定期更新。 然后客户端渲染过去 200 毫秒(实际上取决于游戏的种类)的所有内容,并“预测”服务器将在下一次更新中发送的内容以使其看起来流畅。 只需阅读这篇文章,它比我以往任何时候都更好地解释了它:https://developer.valvesoftware.com/wiki/Source_Multiplayer_Networking

但是,是的,它肯定会比普通网站消耗更多的能量。 但是,单个大厅不需要相互通信,因此您可以非常轻松地并行使用 3 个服务器。 与您拥有的大多数替代方案相比,您可以期望 Node 表现得相当好,因为它可以很好地处理并发连接。只需确保您不运行 CPU 繁重的东西,因为这几乎会杀死 Node(如果您只是接收状态更新并使用基本数学来验证它并再次发送它 -> 完美的选择)。

希望对你有帮助

关于node.js - 使用 node.js 作为游戏服务器来跟踪游戏状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28464819/

相关文章:

node.js - NPM 漏洞对构建过程的重要性

node.js - 如何在子子数组中使用带有外键的 Mongoose 中的 $lookup 聚合?

java - 当使用 ObjectOutputStream/ObjectInputStream 传输自定义对象时,变量将被重置

java - 在java中获取远程tcp连接的ip地址?

html - <link ...> 中缺少 http(s) - 有效吗?

ios - 关于使用 ionic 框架的 iOS IPv6 网络

node.js - 运行 npm install 时发现 ENOTFOUND

ajax - 来自 Node.js 的基本警报

node.js - Node Js 是否使用 libuv 线程池进行网络 I/O

networking - 为什么我收到错误 ("status":405 ,"error" :"Method Not Allowed") upon sending data to Thingsboard device via command line