程序聚合 软件案例 高性能多Reactor WebServer(基于 C++)-WebServer

高性能多Reactor WebServer(基于 C++)-WebServer

2026-06-12 21:28:34
行业:社交、企业内部管理
载体:网站
技术:C、C++

业务和功能介绍

## 项目概述

一个基于 C++ 的 Linux 高性能 Web 服务器,采用主从多 Reactor 架构 + Epoll IO 多路复用 + 模拟 Proactor 事件处理模型,使用时间轮定时器管理定时,支持 HTTP GET/POST 请求处理与 MySQL 数据库交互。

## 构建与运行

```bash
# 克隆仓库
git clone git@github.com:c1y1k/tinywebserver.git
cd tinywebserver

# 构建
mkdir build && cd build
cmake ..
make

# 运行
./server# 高性能多 Reactor WebServer(基于 C++)

> 本项目基于 [qinguoyi/TinyWebServer](https://github.com/qinguoyi/TinyWebServer) 进行深度改造与性能优化,
> 定位并修复多项高并发稳定性缺陷,QPS 提升 **300%**。


项目实现

## 核心特性

### 架构设计
- **主从多 Reactor**:MainReactor 通过 Epoll 监听 `listenfd`,Round-Robin 分发连接到 SubReactor
- **模拟 Proactor**:SubReactor 提前读取 socket 数据到连接对象,工作线程直接处理,减少 IO 等待
- **线程池**:工作线程池处理业务逻辑,关注锁粒度与上下文切换开销

### 连接管理
- **O(1) 时间轮定时器**:替代传统轮询方案,利用 `epoll_wait` 心跳触发过期检测,无额外定时器开销
- **RAII 连接池**:`ConnectionRAII` 对象自动管理 MySQL 连接获取与归还,互斥锁 + 条件变量保证线程安全

### 稳定性
- 定位短连接洪水后服务器 **"假死"** 根因:超时回调未释放 socket fd 及 fd 计数器
- 通过 Valgrind 内存检测 + 日志埋点逐步定位,修复后 **10,000 并发稳定运行 30 分钟**

### 性能优化
- 火焰图定位核心瓶颈:`sys_munmap`(48.75%)+ `native_send_call_func_ipi`(20.24%)
- 根因定位:多线程并发 `mmap/munmap` 文件映射导致全核 **TLB shootdown**
- 优化方案:`mmap+writev` → **sendfile 零拷贝**
- 优化结果:

| 指标 | 优化前 | 优化后 | 提升 |
|------|--------|--------|------|
| `sys_munmap` 开销 | 48.75% | 0% | 完全消除 |
| QPS | 18,700 | 74,868 | **+300%** |
| 新瓶颈 | — | `sem_post/futex`(31%) | 指向无锁化改造方向 |
---

## 技术栈

| 分类 | 技术 |
|------|------|
| 语言 | C++(RAII、智能指针、移动语义) |
| IO 模型 | Epoll ET/LT、非阻塞 IO |
| 事件模型 | Reactor + Proactor |
| 并发 | 多线程、互斥锁、条件变量、信号量 |
| 数据库 | MySQL(RAII 连接池) |
| 构建 | CMake / Makefile |
| 调试 | GDB(崩溃/死锁定位)、Valgrind(内存泄漏检测) |
| 压测 | wrk |
| 性能分析 | perf + 火焰图(FlameGraph) |
| 版本控制 | Git |
---

示例图片视频


陈yk
3天前活跃
方向: 前端-Web前端、后端-PHP、
交付率:100.00%
相似推荐
数据指标中心
项目介绍: DataSense 数据智能平台,面向企业数据资产管理与分析场景,覆盖指标管理、标签管理、模型管理、数据服务、探索、数据门户等核心模块,支持数据资产的统一管理、配置、发布与消费。采用模块化业务架构,兼顾复杂表单配置、资产详情展示、权限控制与多业务模块复用。
能源采购后台管理系统
睡醒再填睡醒再填睡醒再填睡醒再填睡醒再填睡醒再填睡醒再填睡醒再填睡醒再填睡醒再填睡醒再填睡醒再填睡醒再填睡醒再填睡醒再填睡醒再填睡醒再填睡醒再填睡醒再填睡醒再填睡醒再填睡醒再填睡醒再填睡醒再填睡醒再填睡醒再填睡醒再填睡醒再填睡醒再填睡醒再填
可视化大屏编辑器
1.类似图表编辑器,这是一个大屏的编辑器; 2.提供基础的组件; 3.提供复合组件,自定义多个基础组件构建的组合体; 4.提供在线组件编辑器; 5.提供地图功能封装组件,包括基础的图层和地图效果; 6.提供api配置; 7.支持框架和项目数据的离线部署;
龙华群团小程序
1.提供实时政策资讯; 2.提供共青团,妇联,工会三大机构展开的普通活动和交友活动; 3.提供心理自测等法律咨询一系列; 4.积分兑换; 5.组织内部交友联谊; 6.后台管理同步多个小程序的公众号文章和自定义文章; 7.支持分享等; 8.支持原始数据的导入导出和统计;
智能项目协同与工时成本管理平台
该项目面向软件外包公司和项目型交付团队,目标是把需求评审、任务拆解、迭代发布、工时填报、成本核算、缺陷跟踪、风险预警和客户验收流程集中到一个后台系统中管理。系统包含项目驾驶舱、项目组合看板、需求池、迭代看板、团队排期、预算分析、质量洞察、交付资产归档等模块。项目经理可以实时查看多个项目的进度、预算偏差和风险等级,研发和测试成员可以按迭代处理任务、提交工时和关闭缺陷,交付人员可以沉淀部署文档、验收清单和培训资料,最终提升项目透明度和交付效率。
帮助文档   Copyright @ 2021-2024 程聚宝 | 浙ICP备2021014372号
人工客服