问题是:

  • 假设我们有两个 node .js进程运行:example1.jsexample2.js.

  • example1.js中,函数func1(input)返回result1.

  • 有没有办法从example2.js以内拨打func1(input)并获得result1作为结果?

根据我对Node的了解.js,我只找到了一个使用套接字进行通信的解决方案.然而,这并不理想,因为它需要一个进程监听一个端口.如果可能的话,我希望避免这种情况.


EDIT:在一些问题之后,我想补充一点,在层次 struct 中,example1.js不能是example2.js的子过程,而是相反.如果有帮助的话——只有一个example1.js处理自己的数据,许多example2.js处理自己的数据+第一个进程的数据.

推荐答案

您描述的用例让我想到了dnode,通过它,您可以轻松地公开由不同进程调用的函数,由使用网络套接字(和socket.io,因此您可以在浏览器中使用相同的机制)的dnode进行协调.

另一种方法是使用消息队列,共有many good bindings for different message queues个.

据我所知,最简单的方法是使用child_process.fork():

这是生成 node 进程的spawn()个功能的特例.除了在一个普通的ChildProcess实例中拥有所有方法外,返回的对象还内置了一个通信通道.通道通过child.send(message, [sendHandle])写入,消息由子系统上的'message'事件接收.

所以,举个例子,你可以举个例子2.js:

var fork = require('child_process').fork;
var example1 = fork(__dirname + '/example1.js');

example1.on('message', function(response) {
  console.log(response);
});

example1.send({func: 'input'});

例1.js:

function func(input) {
  process.send('Hello ' + input);
}

process.on('message', function(m) {
  func(m);
});

Node.js相关问答推荐

Mongoose-不会更新数组中的属性值

如何将我的Redis客户端配置为在禁用群集模式的情况下使用读取副本?

如何在Angular jest测试中调用Nodejs的垃圾收集? node v20的测试速度慢且内存泄漏

函数声明中的异步在没有等待的函数中做什么?

找不到 vue-template-compiler@2.6.14 的匹配版本 | Shopware 6.5 更新后的 node 问题

如何在nodejs中打印pdf

如何在 Firestore 函数上使用类型模型来获取字段值

Amplify 部署的应用程序出现TypeError: handler is not a function错误,但它在本地运行

Typescript 条件语句不过滤值?

在将用作 nodejs/expressjs 中的中间件的函数中使用 keycloak.protect()

Winston http 日志(log)级别的行为与 info 不同

Mongoose,如何一次更新多个?

在 gatsby 中安装软件包时不推荐使用的错误

如何在拦截器中发送不同的请求?

如何申请在NextJS上下载文件的许可?

如何undo撤消 Object.defineProperty 调用?

如何在 Node.js 中使用 chmod

为什么我们要为 Angular 2.0 安装 Node.js?

npm package.json 操作系统特定脚本

我应该如何在 webpack 中使用时刻时区?