在Node.js中的两个不同进程之间进行通信
问题是:
假设我们有两个正在运行的Node.js进程:
example1.js
和example2.js
。结果中
example1.js
有func1(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