Node.js到Node.js的通信

我如何使用从另一个Node进程加载的其他Node进程的模块。

我运行的例子是:

node my_modules 

哪个加载MyModule

那么我将运行另一个nodejs进程:

 node grab_modules 

它将运行GrabModule

GrabModule将尝试使用MyModule的函数

这可能吗? 如果这是可能的如何?

你想要的可能是dnode :

从dnode的README :

服务器(托pipe要运行的function):

 var dnode = require('dnode'); var server = dnode({ zing : function (n, cb) { cb(n * 100) } }); server.listen(5050); 

客户端(在服务器上调用函数并在callback中获得结果)

 var dnode = require('dnode'); dnode.connect(5050, function (remote) { remote.zing(66, function (n) { console.log('n = ' + n); }); }); 

这取决于你正在尝试做什么。

如果您只是想从两个单独的节点进程中重用相同的模块(MyModule),那么这很容易。 你只需要在GrabModule中放入require('MyModule'),当你运行grab_module时MyModule是可以访问的。

如果要在两个进程之间“共享”MyModule(包括其全局variables),则要复杂得多。 您需要定义两个进程(通常是REST over socket)之间的进程间协议,并使用该协议从另一个进程访问该进程。

1)要在不同的进程中使用一个模块(实现)而不是一个实例(模块在进程的某个地方使用require进行加载),则只需要在需要的地方需要该模块。

如果运行两个进程,例如,使用'MyModule'的进程A和使用'GrabModule'的进程B,但是只需要进程B中的'GrabModule',就可以访问'MyModule'的导出属性,那么你只需要使用require('MyModule的path')。

2)另一方面,如果你需要一个进程B,可以访问一个进程A的一个模块的状态(一个已经执行的模块,因为你在某处使用require),那么你需要使用一个IPC(Inter进程间通信),允许在进程A和进程B之间交换数据,并在其上build立或使用相同的协议。

取决于你的进程是在同一台机器上还是在不同的机器上,可以在同一个操作系统上使用一些IPC构build,就像nodej提供的子fork( http://nodejs.org/api/child_process.html#child_process_child_process_fork_modulepath_args_options )或者使用一个networking通道内置的IPC。

例如,您可以使用Redis的发布/订阅消息传递系统( http://redis.io/topics/pubsub

那这个呢:

my_modules将作为公共api(rest api,xml-rpc,…)的程序工作,而grab_modules将连接到api并从my_modules调用函数

如果您还需要与其他语言和/或高速互操作性, ZeroMQ也是一个选项。 虽然最初是一个普通的C库,但我对NodeJS绑定有很好的体验。

几乎所有stream行的语言都有一个ZeroMQ绑定,请参阅http://zeromq.org/bindings:_start