gpt4 book ai didi

node.js - fork 一个子进程并注入(inject)依赖

转载 作者:IT老高 更新时间:2023-10-28 23:14:20 24 4
gpt4 key购买 nike

我目前在一个阻塞的模块中有一个操作,所以我正在考虑把它变成一个我 fork 的子进程。

如果我想这样做,那么我当然需要修改我的模块的架构。模块要求通过调用模块作为函数来注入(inject)依赖项,并传入依赖项,如下所示:

var dependency = { name: "Bob" }
require('worker')(dependency)

然后在我的 worker 模块中:

module.exports = function (dependency) {
// Outputs { name: "Bob" }
console.log(dependency)
}

我怎样才能把这个例子变成一个被 fork 的子进程?

最佳答案

使用 .fork() 时,您将启动一个完全独立的进程,因此您无法在父进程和子进程之间传递引用(并且仅限于在进程创建后进行消息传递)。

一种不需要消息传递的方法是在您 fork 进程时传递参数(在数组中)。尽管我相信您必须坚持使用简单的字符串/数字值(但从代码中看起来这对您来说可能就足够了)。例如:

顶层:

var name = 'bob'
var args = [name];
var childProcess = require('child_process').fork(__dirname + '/worker', args);

在工作进程中:

var name = process.argv[2]; //AFIAK elements 0 and 1 are already populated with env info

更新

如果您真的想走消息传递路线(如果您已经需要发送消息,我会犹豫推荐),那么您可以区分消息类型,如下所示(可能有更优雅的方式):

顶层:

var childProcess = require('child_process').fork(__dirname + '/worker');
childProcess.send({msgtype:'dependencies', content:dependencies});

//Then to send 'normal' message:
childProcess.send({msgtype:'myothermessagetype', content:'some content'}

在工作进程中:

process.on('message', function(msg){
if(msg.mtype == 'dependencies') {
var dependencies = msg.content;
//Do something with dependencies
} else if(msg.mtype == 'myothermessagetype') {
var normalmessage = msg.content;
//Do something in response to normal message.
}
});

关于node.js - fork 一个子进程并注入(inject)依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15368436/

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