使用 node.js 作为游戏服务器来跟踪游戏状态
Using node.js as a gaming server to keep track of game state
我正处于移动多人实时游戏的规划阶段,我正在考虑实施何种架构以跟踪游戏大厅内的状态。
我考虑过让游戏成为点对点游戏,其中同一游戏大厅(最多 4 名玩家)内的所有设备都会随着游戏的进行向其他玩家发送他们的位置。我还考虑过让玩家连接到服务器,服务器跟踪游戏状态并将状态发送给每个玩家。
如果我真的走这条路并使用节点实现服务器,我需要考虑哪些注意事项?
我预测可扩展性将是一个主要问题,因为服务器必须跟踪每个标称 运行 60 fps 的游戏大厅的状态。如果我有 100 个活跃的游说团体,我可以预见可能出现的问题。会是这种情况吗?我应该研究不同的网络架构吗?还是在服务器达到最大值之前我可以获得大量容量?
您将 运行 遇到的最大问题是 Node 不是为处理与实时模拟一样对延迟敏感的应用程序而构建的。
HTTP 是一个臃肿的协议,而且它是基于文本的。它不适用于大多数人认为是多人游戏的游戏类型。它可能适用于高延迟不是问题的游戏,例如 facebook 游戏。
很大程度上取决于游戏的类型。
点对点解决方案可能很棘手,作弊很容易,除非你在每个客户端上验证它,但因为你想 运行 它在移动客户端上会大大降低游戏速度。
在中央服务器上验证数据并发送验证数据更有意义。
一般来说,FPS 对服务器来说根本不重要。
每个客户端只是将用户输入发送到服务器,而不是每一帧
(按下按钮 - 释放按钮)。
服务器使用所有这些信息并计算需要发生的事情并向客户端发送定期更新。
然后客户端渲染过去 200 毫秒(实际上取决于游戏的种类)和 "predicts" 服务器将在下一次更新中发送的内容以使其看起来流畅。
请阅读这篇文章,它比我以往任何时候都更好地解释了它:https://developer.valvesoftware.com/wiki/Source_Multiplayer_Networking
但是,是的,它肯定会比普通网站消耗更多的能量。
但是,单个大厅不需要相互通信,因此您可以非常轻松地并行使用 3 个服务器。
与您拥有的大多数替代方案相比,您可以期望 Node 表现得相当好,因为它可以很好地处理并发连接。只要确保你没有 运行 CPU 沉重的东西,因为这几乎会杀死 Node(如果你只是接收状态更新并使用基本数学来验证它并再次发送它 -> 完美的选择) .
希望对您有所帮助
我正处于移动多人实时游戏的规划阶段,我正在考虑实施何种架构以跟踪游戏大厅内的状态。
我考虑过让游戏成为点对点游戏,其中同一游戏大厅(最多 4 名玩家)内的所有设备都会随着游戏的进行向其他玩家发送他们的位置。我还考虑过让玩家连接到服务器,服务器跟踪游戏状态并将状态发送给每个玩家。
如果我真的走这条路并使用节点实现服务器,我需要考虑哪些注意事项?
我预测可扩展性将是一个主要问题,因为服务器必须跟踪每个标称 运行 60 fps 的游戏大厅的状态。如果我有 100 个活跃的游说团体,我可以预见可能出现的问题。会是这种情况吗?我应该研究不同的网络架构吗?还是在服务器达到最大值之前我可以获得大量容量?
您将 运行 遇到的最大问题是 Node 不是为处理与实时模拟一样对延迟敏感的应用程序而构建的。
HTTP 是一个臃肿的协议,而且它是基于文本的。它不适用于大多数人认为是多人游戏的游戏类型。它可能适用于高延迟不是问题的游戏,例如 facebook 游戏。
很大程度上取决于游戏的类型。 点对点解决方案可能很棘手,作弊很容易,除非你在每个客户端上验证它,但因为你想 运行 它在移动客户端上会大大降低游戏速度。
在中央服务器上验证数据并发送验证数据更有意义。
一般来说,FPS 对服务器来说根本不重要。 每个客户端只是将用户输入发送到服务器,而不是每一帧 (按下按钮 - 释放按钮)。 服务器使用所有这些信息并计算需要发生的事情并向客户端发送定期更新。 然后客户端渲染过去 200 毫秒(实际上取决于游戏的种类)和 "predicts" 服务器将在下一次更新中发送的内容以使其看起来流畅。 请阅读这篇文章,它比我以往任何时候都更好地解释了它:https://developer.valvesoftware.com/wiki/Source_Multiplayer_Networking
但是,是的,它肯定会比普通网站消耗更多的能量。 但是,单个大厅不需要相互通信,因此您可以非常轻松地并行使用 3 个服务器。 与您拥有的大多数替代方案相比,您可以期望 Node 表现得相当好,因为它可以很好地处理并发连接。只要确保你没有 运行 CPU 沉重的东西,因为这几乎会杀死 Node(如果你只是接收状态更新并使用基本数学来验证它并再次发送它 -> 完美的选择) .
希望对您有所帮助