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

Posted

技术标签:

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

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

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

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

我做什么不需要

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

有什么想法或提示吗?

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

【问题讨论】:

【参考方案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

    使用节点核心的 TCP 网络通过 unix 域套接字进行连接。 http://nodejs.org/docs/latest/api/all.html#all_net_connect_options_connectionlistener

    仍然是基于事件的原始数据流,而不是高级消息 双向 内存中 javascript

    好旧的 TCP。

    仍然是基于事件的原始数据流,而不是高级消息 双向 内存中 javascript

    节点到节点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 套接字支持双向事件,这就是您要问的。为了建立连接,您需要一个进程作为服务器,一个作为客户端,但一旦连接,它们就是“对等体”。

以上是关于Node.js 的进程间和服务器间事件发射器/侦听器?的主要内容,如果未能解决你的问题,请参考以下文章

Node基础知识笔记

Websocket 内存泄漏 node.js。事件发射器?

NodeJS 警告:可能的事件发射器泄漏。添加了 11 个开放式侦听器

Node.js自定义对象事件监听与发射

Node.js事件处理机制

如何在Node.js中对使用promises和事件发射器的函数进行单元测试?