Node.js的进程间事件发射器?

时间:2013-07-25 19:16:54

标签: node.js ipc message-queue interprocess

目前,我在我的应用程序中使用EventEmitter2作为消息总线,我非常喜欢它。

无论如何,现在我需要一个消息总线,它不仅可以在进程中工作,还可以在进程间工作。我理想的候选人会...

  • ...与EventEmitter2 API兼容(“直接替换”),
  • ...没有专用服务器或外部服务(例如数据库,消息队列......),仅使用操作系统资源,
  • ...用纯JavaScript编写,
  • ...在内存中运行,因此不需要持久性。

我做的需要:

  • 它不需要在Windows上运行,OS X和Linux都可以。
  • 如果只能在一台机器上运行,那就没问题了。

任何想法或提示?

PS:如果你可以推荐一款可用的产品,那也没关系,但是如果你可以指引我自己做一个无服务器的方向,也没关系。

1 个答案:

答案 0 :(得分:11)

以下是我看到的选项。

  1. <强> process.fork /发送。如果两个进程都是节点,则节点核心通过此API提供简单的,事件驱动的IPC机制。它与process.fork配对,因此,如果您的流程是基于节点的主服务器和多个基于节点的工作服务器/支持子流程,process.send可能是一个可行的选择。 http://nodejs.org/docs/latest/api/all.html#all_child_process_fork_modulepath_args_options

    • 基于事件,但不是EventEmitter2 drop-in
    • 双向
    • 高效
    • 仅使用操作系统资源
    • 内存
    • 的javascript
  2. 使用node core的TCP网络通过unix域套接字进行连接。 http://nodejs.org/docs/latest/api/all.html#all_net_connect_options_connectionlistener

    • 仍然基于事件但是原始数据流而不是高级别消息
    • 双向
    • 内存
    • 的javascript
  3. 老旧的TCP。

    • 仍然基于事件但是原始数据流而不是高级别消息
    • 双向
    • 内存
    • 的javascript
  4. 节点到节点socket.io

    • 基于事件,但不是EventEmitter2 drop-in
    • 双向
    • 内存
    • 的javascript
  5. 在所有情况下,连接后都会获得双向通信,但始终存在第一个对等体(TCP或socket.io中的服务器,process.fork中的父进程)和第二个对等体(TCP或套接字中的客户端)的概念.io,进程中的子进程.fork)。