Node.js - 在Child进程中需要相同的模块

时间:2016-07-26 11:06:40

标签: javascript node.js require child-process

我在向Child进程提供相同的模块或对象时遇到问题。 由于无法将正常对象发送到我的Child进程(我只能发送"服务器",套接字或JSON对象),我尝试创建一个模块,我需要在我的主app.js,在其上设置任何必要的数据,而且在我的子进程中,我也需要它。

问题是,在我的Child进程中,我得到了一个不同的对象,而不是我在app.js中创建的对象。我尝试使用普通对象,并在其上设置属性,以及函数...

//module file
var Data = function(){
    this.data = null;

    return this;
};

module.exports = Data;

......我这样用过......

//app.js
var module = require("moduleName")();
module.data = "something";

...但是在我的Child流程中,数据仍为空

//Child process
var module = require("moduleName")();
console.log(module.data); --> null

两个文件(app.js和子进程文件)都在同一个项目和目录中。

我唯一的好处是,因为我使用fork()创建了我的Child进程,它可能会为模块使用不同的缓存...

那么有什么方法可以实现,在我的Child进程中获取相同的对象,或者有没有办法将对象(而不是JSON)发送到我的Child进程?

提前致谢!

1 个答案:

答案 0 :(得分:3)

子进程和父进程是不同的进程 - 它们不共享内存。

您要么必须在它们之间使用一些进程间通信来同步数据,要么使用像Redis这样的所有进程都会使用的公共服务。

您目前正在尝试这样做的方式是不可能的,而不仅仅是在Node中。任何两个进程都有自己的内存,它们之间发送的所有内容都不会自己共享或同步。

如果不使用像Redis这样的服务,您可以通过发送消息与流程进行通信。

child是您父进程中对子进程的引用时,您可以使用以下命令发送邮件:

child.send({some:"object"});

在您的孩子中,您可以通过以下方式收听这些消息:

process.on('message', function(object) {
    // do something with object
    // like update your local copy
});

这样,父进程可以在每次对象更改时通知其所有子进程,并向它们发送新的副本。

更多信息: