Reactor
# 演进
为了让服务端为多个客户端提供服务,最容易想到的就是为每一个客户端创建一个线程/进程(线程较进程更加轻量化)。然而对客户端的连接和关闭就是对线程的创建和销毁,这样开销较大,所以使用线程池技术实现资源复用,减小成本,再使用 IO 多路转接用一个线程监视所关心 socket 的读写准备,高效的处理业务。
基于面向对象的思想,对多路转接进行封装而不需要考虑底层 api 的细节,直接关注应用代码的编写,即 Reactor 模式,一种将就绪事件派发(Dispatcher)给对应服务处理程序的事件设计模式。
Reactor 模式主要由 Reactor 和处理资源池这两个核心部分组成:
- Reactor 负责监听和分发事件,事件类型包含连接事件、读写事件、异常事件;
- 处理资源池负责处理事件
# 单 Reactor 单进程
- Reactor 对象通过 select (IO 多路复用接口) 监听事件,收到事件后通过 dispatch 进行分发,具体分发给 Acceptor 对象(建立连接)还是 Handler 对象(请求处理),还要看收到的事件类型;
- 如果是连接建立的事件,则交由 Acceptor 对象进行处理,Acceptor 对象会通过 accept 方法 获取连接,并创建一个 Handler 对象来处理后续的响应事件;
- 如果不是连接建立事件, 则交由当前连接对应的 Handler 对象来进行响应;
# 单 Reactor 多进程
# 多 Reactor 多进程
# 好的网络服务器设计
上次更新: 2025/11/11, 22:03:54