Node.js的进程间和服务器间事件发射器/监听器?

8
目前,我在我的应用程序内部使用EventEmitter2作为消息总线,我非常喜欢它。
无论如何,现在我需要一个不仅可以在进程内工作,而且还可以在进程之间工作的消息总线。我理想的候选人应该...
- ...与 EventEmitter2 兼容(“插拔式替换”), - ...不需要专用服务器或外部服务(例如数据库、消息队列等),仅使用操作系统资源, - ...纯 JavaScript 编写, - ...仅在内存中运行,因此不需要持久性。
我不需要的是:
- 它不需要在 Windows 上运行,只要在 OS X 和 Linux 上就可以。 - 如果它只能在单台机器上工作,那也没关系,它不需要具备网络感知功能。
有什么建议或提示吗?
附言:如果你可以推荐一款现成的产品,那当然很好,但如果你可以指点我如何自己做到无服务器的事情,那也是可以的。
1个回答

13

以下是我所见到的选项:

  1. process.fork/send。如果两个进程都是Node,Node核心可以通过这个API提供一个简单的事件驱动IPC机制。它与process.fork配对使用,因此如果您的进程是基于Node的主进程和几个基于Node的工作进程,process.send可能是一个可行的选择。http://nodejs.org/docs/latest/api/all.html#all_child_process_fork_modulepath_args_options

    • 基于事件,但不支持EventEmitter2
    • 双向的
    • 高效的
    • 仅使用操作系统资源
    • 内存中
    • JavaScript
  2. 使用Node核心的TCP网络连接Unix域套接字。 http://nodejs.org/docs/latest/api/all.html#all_net_connect_options_connectionlistener

    • 仍然是基于事件的,但是是原始数据流而不是高级消息
    • 双向的
    • 内存中
    • JavaScript
  3. 传统的TCP。

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

    • 基于事件,但不支持EventEmitter2
    • 双向的
    • 内存中
    • JavaScript

一旦连接成功,您将获得双向通信,但始终存在第一个对等方(在TCP或socket.io中为服务器,在process.fork中为父进程)和第二个对等方(在TCP或socket.io中为客户端,在process.fork中为子进程)的概念。


是的,我做了。但这些应用程序彼此完全不相关,因此我不能保证它们是分支。 - Golo Roden
也许我没理解 - 这不意味着我需要在某个地方拥有一个Socket.io服务器吗?无论是外部服务器还是每个客户端都需要包含一个服务器?据我所知,没有“点对点”Socket.io,是吗? - Golo Roden
如果你想在Unix上进行进程间通信,可以使用FIFO、Unix域套接字或TCP套接字。socket.io将使TCP套接字支持双向事件,这正是你所要求的。为了连接,你需要一个进程作为服务器,另一个进程作为客户端,但一旦连接成功,它们就是“对等体”。 - Peter Lyons

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接