程序聚合 软件案例 高性能多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
30天前活跃
方向: 前端-Web前端、后端-PHP、
交付率:100.00%
相似推荐
鲜果运营小程序
用于鲜果公司内部的,主页提供市场服务、物业系统、经营工具,每项目点进去实现具体信息的记录和查询,关联相应的审批流。市场服务主要用于车辆、活动和账户信息,物业用于公司日常的登记、过磅、台账和流水,经营工具是做一些数据的整体管理和统计。
粮食收购点出入口系统-粮食收购点出入口系统
1.为了乡镇粮食收购点的业务功能如:出入库、记录库存、统计查询使用方便 2.满足多个收购点多租户登录使用 3.满足多个品种地磅进行系统适配使用 4.满足多个品牌摄像头接入 5.能够进行实时小票打印,包含销售模块、收购模块,能够根据小票的二维码快速查询信息
江西省人民医院医疗廉洁防控平台
对接医院信息系统,自动归集:处方、医嘱、药品耗材使用、检查检验申请、收费结算、耗材采购、设备采购、患者就诊、医保结算等全量业务数据,形成医疗行为大数据池。 内置风控规则模型,自动筛查异常行为并预警:大处方、重复开药、高频开同类检查、耗材异常使用、同一医生高频开具特定药品 / 耗材、超适应症检查、医保违规结算等;按风险等级分为红 / 黄预警,自动推送至医务、医德医风办、纪检部门。
课表查询(正方教务系统多校适配版)
高校教务系统(正方 jwglxt 等)是学生查询课表、成绩、考试安排的唯一官方入口, 但普遍存在四个现实问题:一是登录需 RSA 加密加密并对接 CSRF 令牌,页面为服务端 渲染的复杂表格,手机浏览器打开体验极差;二是课表的单双周、分段奇偶、调休与临时 停课信息只能靠学生自己推算,极易看错;三是成绩与绩点口径混乱,挂科课程常被错误 计入"已获得学分",导致学生无法与学校数字对账;四是空教室只能逐节次手工查询, 效率极低。学生每周都要反复核对课表与空教室,却缺少一个能在手机上清晰查看、并可 一键导入系统日历的工具。本项目立项,即为解决高校学生在课表、成绩、考试、空教室 四类高频信息上的查询成本问题。
WPF上位机-上位机SCADA/HMI
🌟 核心架构与技术亮点 (Architecture Highlights) 🔄 内存级环形缓冲区 :采用手搓环形队列实现高频采集与消费解耦,极大地降低 C# 垃圾回收 (GC) 压力支撑界面流畅渲染。 ⚡ 自研轻量级数据核心 :轻量级内存数据核心,高性能内存状态机,实时采集点位高速路由,实时状态响应与事件报警分发。 ⏱️ 自适应时间补偿 :基于高精度 Stopwatch 计时,动态修正采集调度周期,抑制高频采集任务的时间漂移与时序抖动 🔒 无饥饿并发控制 :基于轻量级异步锁+线程池隔离策略,PLC通信负载与UI线程解耦。
帮助文档   Copyright @ 2021-2024 程聚宝 | 浙ICP备2021014372号
人工客服