我试图弄清楚这是否是 node.js 子进程的一个不错的用例:
我有一个多人游戏,人们参与 1v1 比赛。我应该为每场比赛使用一个子进程吗?
不是真的需要。由于节点是基于事件的,单个进程将能够处理数千个这样的玩家对。假设您正在使用now.js ,您将为每个这样的对创建“房间”/“组”/“频道” 。命名法可能会根据您使用的库而有所不同,但总体方法是相同的 - 将所有将在同一个“频道”中相互对战的玩家分配。如果您实际上为每个这样的玩家对使用一个子进程,那么您实际上是在扼杀构建 node.js 的目的。
另一方面,生成子进程的真实世界用例是在forever.js(以及cluster.js)中实现的。这里一个子进程(也称为worker)由主进程产生。工作进程执行实际工作,例如处理 HTTP 请求,而主进程仅监视工作进程并在现有工作进程死亡(由于各种原因)时生成新的工作进程。子进程也用于调用非 nodejs 应用程序。
Node.JS 最酷的地方在于,您可以在一个线程中制作几乎所有逻辑,并且通过一些非常酷的内核特性,Node 知道何时准备好处理新的套接字信息。
Node 正试图逃避的一件事是每个连接一个线程的模型。看看这个。Node 非常适合 I/O 绑定应用程序,因此如果您的游戏需要太多处理,例如计算物理对象,Node 可能不适合您。