如何使用其他Node进程从其他Node进程加载的模块。
我运行的示例如下:
node my_modules加载MyModule的
然后我将运行另一个nodejs进程:
node grab_modules它将运行GrabModule
GrabModule将尝试使用MyModule内部的函数
这个是可能的吗?如果这是可能的,那么如何实现呢?
发布于 2012-06-04 18:21:26
您想要的可能是dnode
服务器(托管要运行的函数):
var dnode = require('dnode');
var server = dnode({
zing : function (n, cb) { cb(n * 100) }
});
server.listen(5050);客户端(它调用服务器上的函数并在回调中获取结果)
var dnode = require('dnode');
dnode.connect(5050, function (remote) {
remote.zing(66, function (n) {
console.log('n = ' + n);
});
});发布于 2012-11-14 13:33:36
这取决于你想要做什么。
如果您只是想重用来自两个独立节点进程的相同模块(MyModule),这是非常简单的。您只需将require(' MyModule ')放入GrabModule中,当您运行grab_module时,就可以访问MyModule了。
如果你想在两个进程之间‘共享’MyModule,包括它的全局变量,那就复杂多了。您需要在两个进程之间定义一个进程间协议(通常是基于套接字的REST ),并使用该协议从另一个进程访问一个进程中的模块。
发布于 2013-05-14 21:49:48
1)要在不同的进程中使用模块(实现)而不是实例(使用require加载到进程的某处的模块),您只需要在需要的任何地方请求该模块。
如果您运行两个进程,例如,使用'MyModule‘进程A和使用’that模块‘的进程B,但您只需要在进程B中的’that模块‘可以访问'MyModule’的导出属性,那么您只需要使用require('path to MyModule')。
2)另一方面,如果您需要一个进程B可以访问一个进程A的模块状态(一个已经执行的模块,因为您在某处使用了require ),那么您需要使用一个IPC (进程间通信),它允许在进程A和进程B之间交换数据,并在进程A和进程B之间构建或使用相同的协议。
根据您的进程是在同一台机器上还是在不同的机器上,可以使用在同一操作系统中构建的一些进程间通信,就像nodejs提供的子分支(http://nodejs.org/api/child_process.html#child_process_child_process_fork_modulepath_args_options)一样,也可以使用某些网络通道中内建的进程间通信。
例如,您可以使用Redis的发布/订阅消息传递系统(http://redis.io/topics/pubsub)。
https://stackoverflow.com/questions/10877206
复制相似问题