节点.js到节点.js通信

Node.js to Node.js communication

本文关键字:节点 js 通信      更新时间:2023-09-26

如何使用从另一个节点进程加载的模块。

我运行的示例:

node my_modules

哪个负载MyModule

然后我将运行另一个 nodejs 进程:

node grab_modules

这将运行GrabModule

GrabModule将尝试使用MyModule中的函数

这可能吗?如果这可能,如何?

你想要的可能是dnode:

来自 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);
    });
});

这取决于您要做什么。

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

如果你想在两个进程之间"共享"MyModule,包括它的全局变量,那就复杂得多了。您需要在两个进程之间定义进程间协议(通常是套接字上的 REST),并使用该协议从一个进程从另一个进程访问模块。

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

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

2)另一方面,如果您需要进程B可以访问进程A

的模块状态(已执行的模块,因为您在某处使用了require),那么您需要使用IPC(进程间通信),它允许在进程A和进程B之间交换数据,并在两者中构建或使用相同的协议, 在它上面。

根据您的进程是在同一台机器上还是在不同的机器上,可以在同一个操作系统中使用一些 IPC 构建,就像 nodejs 提供的子分叉 (http://nodejs.org/api/child_process.html#child_process_child_process_fork_modulepath_args_options) 或使用内置于某个网络通道中的 IPC。

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

这个呢:

my_modules将作为公共API的程序(REST API,XML-RPC,...)。grab_modules将连接到 API 并从my_modules调用函数

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

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