让我们假设我们有两个运行的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
处理自己的数据+来自第一个流程的数据。
答案 0 :(得分:46)
您描述的用例让我想到dnode,使用它可以轻松地公开由不同进程调用的函数,由dnode协调,dnode使用网络套接字(和socket.io,因此您可以使用浏览器中的相同机制。)
另一种方法是使用消息队列,有many good bindings for different message queues。
据我所知,最简单的方法是使用child_process.fork():
这是产生Node进程的
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);
});
答案 1 :(得分:6)
可能你应该试试Messenger.js。它可以方便地进行IPC。
您不必自己在两个进程之间进行通信。