C++ 仿 Muduo 库:高并发服务器架构初探
一、实现目标
本系列旨在通过仿照 Muduo 库的 One Thread One Loop 主从 Reactor 模型,实现一个高并发服务器组件。
- 利用该组件可快速搭建高性能服务器。
- 支持应用层协议(如 HTTP),便于演示和扩展。
- 注意:当前项目定位为高并发服务器基础组件,不包含具体业务逻辑。
二、HTTP 服务器基础
HTTP(Hyper Text Transfer Protocol)是应用层协议,采用简单的请求—响应模式。虽然 HTTP 运行在 TCP 之上,但本质上 HTTP 服务器就是一个基于特定协议格式解析数据的 TCP 服务器。
实现步骤如下:
- 搭建 TCP 服务器接收客户端请求。
- 按 HTTP 协议格式解析数据,明确客户端目的。
- 提供对应服务。
- 将结果组织成 HTTP 协议格式返回给客户端。
实现一个简单的 HTTP 服务器不难,但要构建高性能服务器则需深入理解底层机制。本单元重点讲解基于 Reactor 模式的高性能服务器实现,实际上是在构建一个高性能的基础组件库。
三、Reactor 模型详解
概念
Reactor 模式是一种事件驱动的处理模式。服务端程序通过 I/O 多路复用统一监听事件,收到事件后分发给对应的处理线程或进程。它也被称为 Dispatcher 模式,是编写高性能网络服务器的核心技术之一。
分类
1. 单 Reactor 单线程
- 机制:单 I/O 多路复用 + 业务处理。
- 流程:监控客户端请求,触发事件后直接处理(新建连接或数据通信)。
- 优点:串行化操作,逻辑简单,无线程间通信及资源争抢问题。
- 缺点:无法利用 CPU 多核资源,易遇性能瓶颈。
- 适用场景:客户端数量少、处理速度快的场景。
2. 单 Reactor 多线程
- 机制:单 I/O 多路复用 + 线程池(业务处理)。
- 流程:Reactor 线程负责监控,新连接由 Reactor 处理,数据通信请求分发至 Worker 线程池,处理完毕后由 Reactor 线程响应。
- 优点:充分利用多核资源,效率高,耦合度低。
- 缺点:多线程共享访问控制复杂;单 Reactor 在高并发下可能成为瓶颈。
3. 多 Reactor 多线程(主从 Reactor 模型)
- 机制:多 I/O 多路复用 + 线程池。
- 流程:
- 主 Reactor 处理新连接请求,分发至子 Reactor。
- 子 Reactor 监控客户端通信,接收数据并分发至 Worker 线程池。
- Worker 线程处理业务,响应交回子 Reactor 发送。
- 优点:CPU 资源分配合理,各司其职。
- 缺点:执行流过多会增加 CPU 调度成本。
四、功能模块划分
1. Buffer 模块
用于实现用户态的接收缓冲区和发送缓冲区,管理通信中的数据暂存。
2. Socket 模块
封装套接字操作,提供底层的 IO 接口。
3. Channel 模块
描述符的事件管理模块。实现对可读、可写、错误等事件的管理,并在 Poller 就绪后回调相应的处理函数。




