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

时间:2018-05-04 14:08:54

标签: node.js socket.io scalability

我正在node.js上制作纸牌游戏,我正在考虑为每个游戏室制作一个新游戏。我计划使用fork()进行连接。经过一番研究后,我发现这不是最好的方法,因为每个物理核心都应该有一个节点进程。但是,对于可扩展性和模块化,我的方法不是更好吗?如果让我们说游戏室崩溃,那么它们就不会崩溃。有人能帮我分析一下情况好一点吗?我计划在aws EC2实例上运行游戏,并期望最多1500个并发用户,在4人的房间玩,并与socket.io消息通信。

1 个答案:

答案 0 :(得分:0)

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

关于崩溃,您需要为此进行规划。一些初步提示:

  • 捕获错误并记录错误消息,以便您的Node实例不会完全失败。通常,错误可能会阻止特定功能链正确完成,但不会终止您的过程。
  • 将您的游戏状态保留到其他服务(如数据库),以便事物(如连接)可以恢复。用例示例:“用户失去连接并重新登录,他们重新连接到房间,可以看到游戏处于当前状态”
  • 您可以通过运行诸如forever或PM2(还有其他人)之类的东西来自动恢复您的Node进程。这些将监视并重新启动进程失败(尽管这不应该经常发生)。