让我们假设我们有两个运行的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
人处理自己的数据+来自第一个进程的数据.
Lin*_*iel 46
您描述的用例让我想到了dnode,使用它可以轻松地公开由不同进程调用的函数,由dnode协调,dnode使用网络套接字(和socket.io,因此您可以在浏览器中使用相同的机制) .
另一种方法是使用消息队列,对于不同的消息队列有许多良好的绑定.
我所知道的最简单的方法是使用child_process.fork():
这是
spawn()
产生Node进程的功能的特例.除了在普通的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'});
Run Code Online (Sandbox Code Playgroud)
和example1.js:
function func(input) {
process.send('Hello ' + input);
}
process.on('message', function(m) {
func(m);
});
Run Code Online (Sandbox Code Playgroud)
使用Redis作为消息总线/代理.
https://redis.io/topics/pubsub
您还可以使用ZeroMQ等套接字消息传递,它们是点对点/点对点,而不是像Redis这样使用消息代理.
这是如何运作的?
使用Redis,在两个节点应用程序中,您有两个Redis客户端在执行pub/sub.因此每个node.js应用程序都有一个发布者和订阅者客户端(是的,Redis pub/sub每个节点进程需要2个客户端)
使用ZeroMQ,您可以直接在node.js进程之间通过IPC通道发送消息(不涉及代理 - 除了操作系统本身......).
归档时间: |
|
查看次数: |
40532 次 |
最近记录: |