【问题标题】:Inter-process and inter-server event emitter/listener for Node.js?Node.js 的进程间和服务器间事件发射器/侦听器?
【发布时间】:2013-07-25 20:50:14
【问题描述】:

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

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

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

我做什么不需要

  • 它不需要在 Windows 上运行,OS X 和 Linux 都可以。
  • 只在单机上运行也可以,不需要网络感知。

有什么想法或提示吗?

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

【问题讨论】:

    标签: node.js ipc message-queue interprocess


    【解决方案1】:

    这是我看到的你的选择。

    1. process.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 或套接字中的客户端)的概念.io,process.fork 中的子进程)。

    【讨论】:

    • 是的,我做到了。但是这些应用程序之间完全不相关,因此我不能保证它们是分叉。
    • 也许我不明白——这不意味着我需要一个 Socket.io 服务器吗?是外部的,还是每个客户都需要包含一个? AFAIK 没有“点对点”Socket.io,是吗?
    • 好吧,如果你想在 unix 上进行进程间通信,你可以使用 fifo、unix 域套接字或 tcp 套接字。 socket.io 将使 TCP 套接字支持双向事件,这就是您要问的。为了建立连接,您需要一个进程作为服务器,一个作为客户端,但一旦连接,它们就是“对等体”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-06
    • 2019-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多