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



我在向Child进程提供相同的模块或对象时遇到问题。由于无法将普通对象发送到我的子进程(我只能发送"服务器"、套接字或JSON对象),我尝试创建一个模块,我在主应用程序.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进程?

提前感谢!

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

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

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

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

child是父进程中的子进程的引用时,则可以使用发送消息

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

在你的孩子身上,你可以用收听这些信息

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

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

更多信息:

  • https://nodejs.org/api/process.html#process_event_message

相关内容

  • 没有找到相关文章

最新更新