CNode

Eggjs中Agent的问题

问答
HHyperClockUp发布于7 年前最后回复7 年前2 回复4135 浏览0 收藏

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

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

查看回复

回复 (2)

A
atian25#1·7 年前

那么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 篇文档:
参与回复
登录后即可参与回复。登录