假设我们有两个正在运行的Node.js进程:example1.js和example2.js。
example1.js
example2.js
结果中example1.js有func1(input)返回的函数result1。
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'事件接收消息。
spawn()
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); });