2013-07-25 31 views
7

目前,我在我的应用程序中使用EventEmitter2作为消息总线,我非常喜欢它。Node.js的进程间事件发送器?

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

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

我做什么需要:

  • 它并不需要在Windows上运行,OS X和Linux的罚款。
  • 没关系,如果它只在一台机器上工作,它不需要网络感知。

任何想法或提示?

PS:如果您可以推荐可用的产品,那很好,但如果您能指出我自己如何做无服务器的事情,那也很好。

回答

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落于
    • 双向
    • 高效
    • 只使用OS资源
    • 内存
    • 的JavaScript
  2. 使用节点核心的TCP网络通过unix域进行连接插座。 http://nodejs.org/docs/latest/api/all.html#all_net_connect_options_connectionlistener

    • 还是基于事件的,但原始数据流,而不是高层的消息
    • 双向
    • 内存
    • 的JavaScript
  3. 好老TCP。

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

    • 基于事件,但不是EventEmitter2插入式
    • 双向
    • 内存
    • 的JavaScript

在任何情况下,你得到的双向一旦连接通信,但总是有同行之首的概念(TCP或socket.io中的服务器,process.fork中的父进程)和第二个同位体(TCP或socket.io中的客户机,process.fork中的子进程)。

+0

是的,我做到了。但是这些应用程序完全不相关,因此我不能保证它们是分叉的。 –

+0

查看我的更新。也许socket.io? –

+0

也许我不明白 - 这不是说我需要一个Socket.io服务器吗?是外部的还是每个客户都需要包含一个? AFAIK没有“点对点”Socket.io,是吗? –