跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++算法

C++ 仿 Muduo 库:高并发服务器架构初探

基于 Muduo 库设计思路的高并发服务器架构解析。涵盖单线程、多线程及主从 Reactor 模型的对比分析,详解 Buffer、Socket、Channel、EventLoop 等核心模块的职责与协作流程。通过模块化设计构建高性能 TCP 服务器基础组件,为实际业务开发提供底层支撑。

板砖工程师发布于 2026/3/20更新于 2026/6/1519 浏览
C++ 仿 Muduo 库:高并发服务器架构初探

C++ 仿 Muduo 库:高并发服务器架构初探

一、实现目标

本系列旨在通过仿照 Muduo 库的 One Thread One Loop 主从 Reactor 模型,实现一个高并发服务器组件。

  • 利用该组件可快速搭建高性能服务器。
  • 支持应用层协议(如 HTTP),便于演示和扩展。
  • 注意:当前项目定位为高并发服务器基础组件,不包含具体业务逻辑。

二、HTTP 服务器基础

HTTP(Hyper Text Transfer Protocol)是应用层协议,采用简单的请求—响应模式。虽然 HTTP 运行在 TCP 之上,但本质上 HTTP 服务器就是一个基于特定协议格式解析数据的 TCP 服务器。

实现步骤如下:

  1. 搭建 TCP 服务器接收客户端请求。
  2. 按 HTTP 协议格式解析数据,明确客户端目的。
  3. 提供对应服务。
  4. 将结果组织成 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 多路复用 + 线程池。
  • 流程:
    1. 主 Reactor 处理新连接请求,分发至子 Reactor。
    2. 子 Reactor 监控客户端通信,接收数据并分发至 Worker 线程池。
    3. Worker 线程处理业务,响应交回子 Reactor 发送。
  • 优点:CPU 资源分配合理,各司其职。
  • 缺点:执行流过多会增加 CPU 调度成本。

四、功能模块划分

1. Buffer 模块

用于实现用户态的接收缓冲区和发送缓冲区,管理通信中的数据暂存。

2. Socket 模块

封装套接字操作,提供底层的 IO 接口。

3. Channel 模块

描述符的事件管理模块。实现对可读、可写、错误等事件的管理,并在 Poller 就绪后回调相应的处理函数。

4. Connection 模块

对 Buffer、Socket、Channel 的整体封装,管理单个通信套接字的生命周期。

  • 内部包含:三个回调函数(连接建立、事件、新数据、关闭)、两个接口(发送、关闭)、两个缓冲区、一个 Socket 对象、一个 Channel 对象。
  • 流程:
    1. 向 Channel 注册事件回调,添加到 Poller 监控。
    2. 描述符就绪时,读取数据至接收缓冲区,触发新数据回调。
    3. 业务处理后写入发送缓冲区。
    4. 启动写事件监控,就绪后通过 Socket 发送数据。

5. Acceptor 模块

封装 Socket 和 Channel,管理监听套接字。

  • 流程:注册可读事件回调获取新连接,构建 Connection 对象。

6. TimerQueue 模块

定时任务管理器,基于 Linux 的 timerfd。

  • 作用:管理 Connection 生命周期,释放非活跃连接。

7. Poller 模块

封装 epoll,实现 IO 事件的添加、修改、移除及获取活跃连接。

8. EventLoop 模块

即 Reactor 核心,封装 Poller、TimerQueue 等,负责事件监控。

  • 特性:一对一绑定线程,保证线程安全。所有 Connection 操作必须在对应 EventLoop 线程内完成。
  • 内部组件:eventfd(唤醒阻塞)、Poller、TimerQueue、PendingTask 队列。
  • 流程:
    1. Poller 监控描述符事件,通过 Channel 处理。
    2. 处理完 IO 事件后,执行 PendingTask 队列中的任务。
    3. 使用 eventfd 防止 epoll 长时间阻塞导致任务无法执行。

9. TcpServer 模块

整体 TCP 服务器封装,包含 Acceptor 和 EventLoopThreadPool。

  • 流程:
    1. 初始化 BaseLoop、Acceptor、EventLoop 线程池及 Connection 哈希表。
    2. 设置 Acceptor 回调:创建 Connection,绑定 EventLoop,添加定时销毁任务。
    3. 启动 BaseLoop。

10. 模块关系图

通信连接模块关系图

架构图

目录

  1. C++ 仿 Muduo 库:高并发服务器架构初探
  2. 一、实现目标
  3. 二、HTTP 服务器基础
  4. 三、Reactor 模型详解
  5. 概念
  6. 分类
  7. 1. 单 Reactor 单线程
  8. 2. 单 Reactor 多线程
  9. 3. 多 Reactor 多线程(主从 Reactor 模型)
  10. 四、功能模块划分
  11. 1. Buffer 模块
  12. 2. Socket 模块
  13. 3. Channel 模块
  14. 4. Connection 模块
  15. 5. Acceptor 模块
  16. 6. TimerQueue 模块
  17. 7. Poller 模块
  18. 8. EventLoop 模块
  19. 9. TcpServer 模块
  20. 10. 模块关系图
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • OpenClaw AI 助手跨设备迁移指南
  • C++ 仿函数详解:让对象像函数一样调用
  • 大模型辅助开发:人类与 AI 的职责边界及协作指南
  • π0 开源项目源码深度剖析:从模型架构到 C/S 部署实战
  • Python 数据分析基础流程与实战方法
  • C++ 仿函数核心解析:状态、性能与 STL 实践
  • 网络安全学习路线整理:从基础到进阶指南
  • C++ 仿函数深度解析:状态管理与 STL 实践
  • OpenClaw 龙虾机器人 Windows 系统部署指南
  • C++ 仿函数详解:对象像函数一样调用
  • Flutter 集成 dart_openai 实现 OpenHarmony 应用接入大模型
  • C++ 反向迭代器:原理、实现与避坑
  • FPGA 侧 XDMA 接口时序约束策略与实践
  • WhisperLiveKit 实时语音识别指南:从安装到生产部署
  • FPGA 商用级 ISP:动态坏点校正 DPCC 的滑窗架构与并行判决实现
  • C++ explicit 关键字详解:作用、原因与使用
  • C++ 类与对象详解:封装、this 指针与默认成员函数
  • C++ 二叉搜索树原理与高效实现
  • Java Web 开发环境搭建:IDEA 与 Tomcat 安装部署
  • C++二叉搜索树原理剖析与高效实现

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online