1

我正在 Node 中开发基于 Web 的实时游戏,其中 Node 服务器实例使用 redis 作为通用数据存储。这适用于简单的事情,比如存储每个玩家的聊天或数据。然而,游戏逻辑包含在它自己的 Javascript 模块中——游戏的每个实例都会跟踪很多状态,包括游戏板和每次移动后的状态历史。

我看到两个选项:

  1. 将游戏对象保存在节点工作实例中(在实例之间均匀平衡,例如使用 nginx 的负载平衡)。这是我继承的一个类似项目使用的方法,但我不喜欢它,因为在部署后,主节点进程必须将游戏恢复到每个工作节点进程。这样就违反了十二因素准则
  2. 将游戏状态存储在redis中,例如玩家移动后,节点工作人员从redis中获取游戏状态,将其放入游戏逻辑模块中,并进行移动计算。我对这种方法的主要关注是速度 - 游戏状态不容易适应 redis 数据结构,因此在从 redis 设置/获取状态时会有很多 JSON.parse 和 JSON.stringify 调用,除非我很重重写游戏逻辑以处理更原始的数据类型。

我的目标是让我的节点工作人员保持无状态,以便部署更简单,同时不使用 redis 在速度或效率方面做出任何重大牺牲。有任何想法吗?

4

0 回答 0