Node.js - 在子进程中需要相同的模块
Node.js - Require same module in Child process
我在向我的子进程提供相同的模块或对象时遇到问题。
由于无法将普通对象发送到我的子进程(我只能发送 "server"、套接字或 JSON 对象),我尝试创建一个模块,我需要我的主要 app.js,在上面设置任何必要的数据,而且在我的子进程中,我也需要它。
问题是,在我的子进程中,我得到了一个不同的对象,而不是我在 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 process
var module = require("moduleName")();
console.log(module.data); --> null
两个文件(app.js 和子进程的文件)都在同一个项目和目录中。
我唯一的猜测是,因为我使用 fork()
创建了我的子进程,它可能对模块使用了不同的缓存...
那么有什么方法可以实现,在我的子进程中获取相同的对象,或者有没有办法将对象(不是 JSON)发送到我的子进程?
提前致谢!
child 进程和 parent 进程是不同的进程 - 它们不共享内存。
您要么必须在它们之间使用一些进程间通信来同步数据,要么使用像 Redis 这样所有进程都会使用的公共服务。
您目前尝试的方式是不可能的,不仅仅是在 Node 中。任何两个进程都有自己的内存,它们之间发送的所有内容都不会被共享或同步。
如果不使用像 Redis 这样的服务,您可以通过发送消息与您的进程进行通信。
当 child
是对 child 进程在 parent 进程中的引用时,您可以发送消息:
child.send({some:"object"});
在您的 child 中,您可以通过以下方式收听这些消息:
process.on('message', function(object) {
// do something with object
// like update your local copy
});
这样 parent 进程可以在每次 object 更改时通知它的所有 child 进程,并向它们发送新的副本。
更多信息:
我在向我的子进程提供相同的模块或对象时遇到问题。 由于无法将普通对象发送到我的子进程(我只能发送 "server"、套接字或 JSON 对象),我尝试创建一个模块,我需要我的主要 app.js,在上面设置任何必要的数据,而且在我的子进程中,我也需要它。
问题是,在我的子进程中,我得到了一个不同的对象,而不是我在 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 process
var module = require("moduleName")();
console.log(module.data); --> null
两个文件(app.js 和子进程的文件)都在同一个项目和目录中。
我唯一的猜测是,因为我使用 fork()
创建了我的子进程,它可能对模块使用了不同的缓存...
那么有什么方法可以实现,在我的子进程中获取相同的对象,或者有没有办法将对象(不是 JSON)发送到我的子进程?
提前致谢!
child 进程和 parent 进程是不同的进程 - 它们不共享内存。
您要么必须在它们之间使用一些进程间通信来同步数据,要么使用像 Redis 这样所有进程都会使用的公共服务。
您目前尝试的方式是不可能的,不仅仅是在 Node 中。任何两个进程都有自己的内存,它们之间发送的所有内容都不会被共享或同步。
如果不使用像 Redis 这样的服务,您可以通过发送消息与您的进程进行通信。
当 child
是对 child 进程在 parent 进程中的引用时,您可以发送消息:
child.send({some:"object"});
在您的 child 中,您可以通过以下方式收听这些消息:
process.on('message', function(object) {
// do something with object
// like update your local copy
});
这样 parent 进程可以在每次 object 更改时通知它的所有 child 进程,并向它们发送新的副本。
更多信息: