Node.js – child_process和集群混淆

以这个简短的例子:我有一个名为parent.js的文件,使用下面的代码:

 var child_process = require('child_process') var forker = child_process.fork(__dirname + '/child.js') forker.on('message', function (msg) { console.log('PARENT got message:', msg) }) // sends a message to the forked process? forker.send({msg: 'Parent message.'}) 

第一个问题 :我是否正确? child_process.fork()返回forker进程,不是吗? (像child_process.spawn() ?)

无论如何,这里是child.js的代码:

 process.on('message', function (msg) { console.log('CHILD got message:', msg) }) // sends a message to the forker process? why? process.send({msg: 'Message from the child.'}) 

第二个问题 :在subprocess中, process是指什么? 到目前的分叉过程,我猜? 如果是这样,当我打电话process.send()我发送消息到父进程的权利?

第三个问题 :采取这个例子( 节点的简化版本:正在运行 ):

 var cluster = require('cluster') if (cluster.isMaster) { // fork child... var worker = cluster.fork() worker.on('message', function (msg) { // do stuff }) } else if (cluster.isWorker) { process.send(aMessage) } 

我不清楚的是: worker是前一个例子的forker吗? 并且在worker中的process.send()forker进程发送消息?

1) child_process.fork()以与child_process.spawn()返回新产生的进程相同的方式返回分叉进程。 实际上, fork()就是这样

spawn()节点进程的spawn()函数的一个特例。 除了正常的ChildProcess实例中的所有方法外,返回的对象还有一个内置的通信通道。 1

2)在孩子的process中是指孩子的process 。 也,

在subprocess中,进程对象将有一个send()方法,进程每次在其通道上收到消息时都会发出对象。 2

所以从小孩内部,我们可以用send()发送消息,我们可以用.on('message')来接收它们。 就像在你的片段中一样。

3)正如关于Node.js上cluster模块的文档所述:

工作进程使用child_process.fork method产生,以便它们可以通过IPC与父进程通信并来回传递服务器句柄。 3

所以你是对的。 节点集群以更有用的方式封装了process的function(请注意,在这个时候, cluster模块被标记为实验性的,Api可能在不久的将来发生变化)。