我应该为每个游戏室生成一个新的节点进程吗?

Should I spawn a new node process per game room?

我正在 node.js 上制作纸牌游戏,我正在考虑为每个游戏室生成一个新进程。我计划使用 fork() 进行连接。经过相当多的研究,我发现这不是最好的方法,因为我应该为每个物理内核设置一个节点进程。但是我的方法不是更适合可扩展性和模块化吗?如果假设一个游戏室崩溃了,它不会让其他房间崩溃。有人可以帮我更好地分析一下情况吗?我计划 运行 在 aws EC2 实例上玩游戏,预计最多 1500 个并发用户,在 4 人的房间玩,并使用 socket.io 消息进行通信。

单个 Node 实例可以处理这种类型的负载,因为 NodeJS 的强项之一是实时通信和 许多 并发连接。

关于崩溃,您需要为此做好计划。一些初步提示:

  • 捕获错误并记录错误消息,这样您的 Node 实例就不会完全失败。通常错误可能会阻止该特定函数链正确完成,但不会终止您的进程。
  • 将您的游戏状态保存到另一个服务,如数据库,以便事物(如连接)可以恢复。用例示例:"User loses connection and logs back in, they are re-connected to the room and can see the game in its current state"
  • 您可以通过 运行 诸如 forever 或 PM2(还有其他)之类的方法自动恢复您的 Node 进程。这些将监视并在进程失败时重新启动(尽管这种情况不应该经常发生)。