在Node.js中的两个不同进程之间进行通信

问题是:

  • 假设我们有两个正在运行的Node.js进程:example1.jsexample2.js

  • 结果中example1.jsfunc1(input)返回的函数result1

  • 是否有一种从内部example2.js调用func1(input)并获得result1结果的方法?

从我对Node.js的了解中,我仅找到一种使用套接字进行通信的解决方案。但是,这不是理想的,因为它将需要一个进程在端口上侦听。如果可能,我希望避免这种情况。


编辑:

经过一些问题,我很想补充一点,在层次结构example1.js中不能是的子进程example2.js,而恰恰相反。同样,如果有帮助,则只能有一个example1.js处理自己的数据,而有许多example2.js处理第一个过程的数据。

回答:

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

另一种方法是使用消息队列,不同的消息队列有很多良好的绑定。

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

这是生成spawn()节点进程的功能的特例。除了在普通的ChildProcess实例中包含所有方法之外,返回的对象还内置了一个通信通道。子频道上的事件写入child.send(message,

[sendHandle])并通过该'message'事件接收消息。

因此,对于您的示例,您可以有example2.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'});

和example1.js:

function func(input) {

process.send('Hello ' + input);

}

process.on('message', function(m) {

func(m);

});

以上是 在Node.js中的两个不同进程之间进行通信 的全部内容, 来源链接: utcz.com/qa/398584.html

回到顶部