8

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

无论如何,现在我需要一个消息总线,它不仅可以在进程内工作,而且可以在进程间工作。我理想的候选人会……</p>

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

我不需要什么

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

有什么想法或提示吗?

PS:如果你能推荐一个可用的产品很好,但如果你能指出我如何自己做无服务器事情的方向也很好。

4

1 回答 1

13

这是我看到的你的选择。

  1. 进程.fork/send。如果两个进程都是节点,节点核心通过这个 API 提供了一个简单的、事件驱动的 IPC 机制。process.fork如果您的进程是一个基于节点的主进程和几个基于节点的工作/支持子进程,那么它process.send可能是一个可行的选择。http://nodejs.org/docs/latest/api/all.html#all_child_process_fork_modulepath_args_options

    • 基于事件,但不是 EventEmitter2 插件
    • 双向
    • 高效的
    • 仅使用操作系统资源
    • 在记忆中
    • 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 中的子进程)。

于 2013-07-25T20:15:01.383 回答