pomelo 框架类关系图
下面将呈现 pomelo 框架中,较为核心的非正规的类关系图,先来看一下对类图的一些说明:- 由于 javascript 中实际上没有类的概念,有的只是一个 pseudo-class 的概念,因此这个类关系图中的类并不是与实际的 pomelo 框架中所定义使用的 pseudo-class 一一对应。比如 HandlerFilter,在我们这个类图中,它是一个抽象类,是所有 HandlerFilter 的基类。而在 pomelo 框架中,往往只是定义有 after 和 before 方法的类即可,而不用关心其所继承的抽象类。
- 在类图中,所有的组件,我们都冠以 Co 进行命名,以表示其是一个组件。
- 在类图中,定义了一个 RawSocket,是把其作为了对通信层 socket 的一个抽象。在实际应用中,可能是 WebSocket,TCP 的 socket 或者 socket.io 等等。所有与 RawSocket 相关的类,都是表示这个类在实际应用中会直接参与通信,无论是与客户端通信,还是与其他的服务器通过 rpc 进行通信。

下面对类图进行一些简要的分析:
- 整个框架的核心为两个类 Pomelo 和 Application,Application 实例由 Pomelo 创建。Pomelo 实际上由一系列的组件以及一个全局的上下文 Application 组成。
- 所有的以 Co 开头的都是相应的组件,他们都是抽象类 Component 的子类,每一个组件都完成其相应的功能,不同的服务器将加载不同的组件。这个类图里面的组件都是 pomelo 内建的组件,它们是为了完成 pomelo 的核心功能不可获缺的组件,用户可以通过定义自己的组件对 pomelo 进行扩展。
- 为了更好地展示 pomelo 中使用的各个类之间的关系,这个类图中展示的相关类,不仅仅是 pomelo 这一个项目中定义的类,还包括 pomelo-admin 和 pomelo-rpc 中的相关类。
- 从类图中可以看出,与通信相关的类有 MasterAgent,MonitorAgent;MailBox,Acceptor 以及 connector。实际上,MasterAgent 与 MonitorAgent 是对等的,MasterAgent 充当”服务端“,MonitorAgent 充当“客户端”,MasterAgent 会监听 master 配置的 port,MonitorAgent 会发起连接,它们之间的通信完成 master 服务器对应用服务群的监控和管理。MailBox 和 Acceptor 的关系也与此类似,只不过它们之间的通信完成了框架的 rpc 调用。connector 是用来接受客户端连接的,因此 connector 会监听 clientPort。