Eggjs中Agent的问题
发布于 6 年前 作者 HyperClockUp 3383 次浏览 来自 问答

Agent在官方文档中说明,用于作为Master的【秘书】进行公共事务的处理,那么Agent为什么不和Master合并,将Master直接用于处理公共事务,直接省去了内存开销和复杂的进程间通讯?是因为担心公共事务出错导致Master的崩溃进一步导致所有服务的停止吗?另外,Agent与Worker的通信是通过Master传达的,那为什么又要使用cluster-client进行长连接,使Agent再次绕过Master进行通讯,直接设计为直接通信不也是更省事吗?

我对于eggjs的设计思想知之甚少,只是提出我的疑问,希望得到你们的回答,谢谢大家。

2 回复

那么Agent为什么不和Master合并,将Master直接用于处理公共事务,直接省去了内存开销和复杂的进程间通讯?

  1. Master 的代码越简单越好,代码越少越稳定。
  2. 绝大部分情况下,进程之间不应该有通讯,更别提复杂的通讯。
  3. Agent 是给插件和框架开发者使用的,对于一般的应用开发者,无需了解 Agent 和使用 Agent。

另外,Agent与Worker的通信是通过Master传达的,那为什么又要使用cluster-client进行长连接,使Agent再次绕过Master进行通讯,直接设计为直接通信不也是更省事吗?

  1. Agent 没法跟 Worker 直接通讯,因为他们不是父子关系无法通讯,所以要不是通过共同的父亲 master 中转,要不就是建立 socket 点对点连接。
  2. 前者就是 ipc messenger,后者就是 cluster-client,可以看下这 2 篇文档:

@atian25 谢谢你的回答,对我有一定的启发,我会仔细看两篇文档的,再次感谢!

回到顶部