gpt4 book ai didi

javascript - 如何在 Node.js 中生成独立的子 Node 并重新建立通信?

转载 作者:太空宇宙 更新时间:2023-11-04 01:07:08 25 4
gpt4 key购买 nike

首先是代码:

<小时/>

测试.js:

var cluster = require("cluster");

if (cluster.isMaster) {
var app = cluster.fork();

app.on("message", function(code) {
console.log("Parent received: " + code);
app.send("this is from the test.js parent");
});
}
else {
process.send("");
process.on("message", function(code) {
console.log("Child received: " + code);
process.send("this is from the test.js child");
require("./testobj.js");
process.exit(0);
});
}
<小时/>

testobj.js:

process.send("this is from testobj.js");

process.on("message", function(code) {
console.log("testobj.js received: " + code);
});

process.send("this is the second message from testobj.js");

while (true) {}

运行node test.js时的结果

Parent received: 
Child received: this is from the test.js parent
Parent received: this is from the test.js child
Parent received: this is from testobj.js
Parent received: this is the second message from testobj.js
<小时/>

现在您已经看到了我到目前为止的工作,目标是生成独立于父进程的子进程,但仍保留双向通信。到目前为止,测试代码保留了子级到父级的通信,但不保留父级到子级的通信。有人对如何保留或重建 parent 与 child 的沟通有任何建议吗?

最佳答案

while(true){} 永久卡住该子进程的事件循环,尽管 process.exit(0) 正在杀死 fork 的工作进程并使其不再如此永恒的。据我所知,您无法退出进程并保留通信(因为该进程本质上不再运行)。

通过添加更多事件监听器,您应该能够更轻松地查看正在发生的情况。 fork event 有一个不错的示例,尽管它位于您的 app 变量上,而不是引用的 cluster 变量上。

app.on('fork', function(worker) {
console.log('Worker forked: ' + worker.id);
console.log(worker);
});
app.on('listening', function(worker, address) {
console.log('Worker listening: ' + worker.id);
console.log(address);
});
app.on('exit', function(worker, code, signal) {
console.log('Worker exited: ' + worker.id);
console.log('Code: ' + code + ' Signal: ' + signal);
});

基于worker.send文档/示例,似乎在每个示例中使用 else if(cluster.isWorker) 而不是仅使用 else 可能是个好主意:

if (cluster.isMaster) {
var worker = cluster.fork();
worker.send('hi there');
} else if (cluster.isWorker) {
process.on('message', function(msg) {
process.send(msg);
});
}

关于javascript - 如何在 Node.js 中生成独立的子 Node 并重新建立通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21993741/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com