试图从父进程创建多个子进程并与它们进行通信。但我很难确定产生事件的子进程。在下面,我很惊讶地看到这些消息只来自孩子1,我希望孩子0和孩子1都会发送消息。nodejs与多个子进程通信,无法识别它们
Ubuntu 14.04上的此nodejs(v8.4.0)。
任何想法为什么?
$ node te1.js
got msg from child: 1 {"foo":"bar"}
got msg from child: 1 {"foo":"bar"}
hi you|
hi you|
CHILD got message: {"msg":"hi you"} |
CHILD got message: {"msg":"hi you"} |
===== te1.js ==================
const cp = require('child_process');
var bats = [];
bats.push(cp.fork(`${__dirname}/te2.js`));
bats.push(cp.fork(`${__dirname}/te2.js`));
for (i=0; i<bats.length; i++) {
bats[i]._id = i;
var bat = bats[i]
bat.on('message', function(resp) {
console.log("got msg from child: " + bat._id + " " + JSON.stringify(resp));
})
bat.on('exit', function(code) {
console.log("child " + bat._id + " proc exited")
})
bat.send({msg: "hi you"});
}
======= te2.js ===================
process.on('message', (m) => {
console.log(m.msg + "|")
console.log('CHILD got message:', JSON.stringify(m), "|");
if (m.msg == "exit") {
console.log("exiting...")
process.exit()
}
});
process.send({ foo: 'bar' });
UPDATE1
仪器化te2.js所以它有console.log(m.msg + "|" + process.pid)
, 这有助于我确认两个子进程实际上都收到了来自父进程的消息。
UPDATE2
在消息(s)表示,孩子送到父母,它可以添加PID字段,即te2.js最后一行更改为process.send({ foo: 'bar', pid: process.pid });
,我可以检查哪些子进程发送信息。
但是,目前还不清楚如何检测哪个子进程退出。有任何想法吗?
魔术:使用'为(令i = 0; I
robertklep
@ robertklep,试了一下,但得到了同样的问题。 – packetie
是的,我错过了'var bat = bats [i]'应该是'let bat = bats [i]'。 – robertklep