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
使用节点核心的 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 的进程间和服务器间事件发射器/侦听器?的主要内容,如果未能解决你的问题,请参考以下文章