每场比赛的 node.js 进程

标签 node.js cluster-computing child-process

这是和之前一样的问题:

node.js child processes

我在问我是否应该为我的 node.js 游戏在每场比赛中使用一个子进程。

但我意识到之前我忽略了一些非常重要的细节。

该游戏允许玩家以某些有限的方式操纵游戏规则。然而,这仍然会导致无限循环/内存泄漏/停顿和崩溃。

每次匹配 1 个进程是否是一个可扩展/合理的想法?

最佳答案

如果任何单个游戏进程可以耗尽所有内存或 CPU,则这是不可扩展的。如果你的服务器是一个 8 核机器,八个游戏可以占用所有的 CPU 时间,你无能为力,除了通过 top 监控进程并在需要时杀死它们 - 但那会让颠簸的服务器。

现在,如果您首先设法阻止这些事情(对我来说听起来是个更好的主意),它是可行的。每个进程将占用超过 30mb 的内存,因此每数百个进程就需要一个强大的服务器。看http://site.nodester.com例如,他们似乎在一台机器上运行大约 600 个进程。他们的软件堆栈也是开源的:https://github.com/nodester/nodester

Node v0.8 will bring Isolates (无共享线程),它可能比子进程使用更少的资源。

一个更“严肃”的解决方案是使用某种虚拟化,如 OpenVZ这将允许您设置资源限制,然后只保留一个可用的虚拟服务器池,每个游戏都有自己的。它并不像看起来那么重,每台服务器的开销约为 18 MB,并且您可以在每台机器上托管数百台机器,尽管这是一个复杂得多的设置。

关于每场比赛的 node.js 进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8059684/

相关文章:

javascript - 无法在 heroku 上使用 Node.js 执行多个名称字段 POST

node.js - 错误消息: InvalidKey: A key should contain at least a kind

javascript - nodemailer:无法发送 pdf 附件

java - weblogic中如何配置集群地址

mysql - 我可以使用只有 1.7GB RAM 的 Amazon EC2 "Small"实例运行 MySQL 集群吗?

c - 为什么我的代码中的 fork() 函数没有创建子进程?

c - 如何计算 C 中 fork() 系统调用的运行时间?

zend-framework - 我应该学习什么才能成为一名优秀的 Web 开发人员?

lucene - 在具有共享 NFS 的集群环境中使用 Lucene

unix - 子进程在 fork() 之后始终为零且始终唯一?