繁体   English   中英

Node.js - child_process和群集混淆

[英]Node.js - child_process and cluster confusion

举个简短​​的例子:我有一个名为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.'})

第二个问题process在子流程process引用了什么? 我猜到当前的分叉过程? 如果是这样,当我调用process.send()我正在向父进程发送消息吗?

第三个问题 :举个例子( Node:Up and Running )的简化版本:

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() Node进程。 除了在普通的ChildProcess实例中具有所有方法之外,返回的对象还具有内置的通信通道。 1

2) process中的儿童是指孩子process 也,

在子进程中,进程对象将具有send()方法,并且进程将在每次在其通道上接收消息时发出对象。 2

因此,从孩子内部我们可以发送带有'send()'的消息,我们可以通过.on('message')接收它们。 就像你的片段一样。

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

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

所以你是对的。 节点集群以更有用的方式包含process的功能(请注意,此时, cluster模块被标记为实验性的.Api可能在不久的将来发生变化)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM