# 高性能 HTTP 引擎框架(基于muduo事件驱动) **Repository Path**: Accsen/mudou-concurrent-server ## Basic Information - **Project Name**: 高性能 HTTP 引擎框架(基于muduo事件驱动) - **Description**: 高并发服务器中间件,实现快速连接,直接打理业务即可 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-06-24 - **Last Updated**: 2026-03-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Mudou Concurrent Server 高性能并发服务器项目,基于 Epoll 事件驱动实现,支持高并发 TCP/HTTP 服务。 ## 项目简介 Mudou Concurrent Server 是一个采用 Epoll 机制开发的高性能并发服务器框架,能够支撑大并发量长时压测,具备出色的稳定性和吞吐量表现。 ## 性能测试数据 在900 s 长时极限压测下,2 k→8 k 并发失败率均<0.3 %,成功率 99.7 %+,QPS 七千级波动<5 %,系统零崩溃、零重启。 | 并发 | 持续(s)| Pages/min| Pages/s(QPS) | 总请求 | 成功请求 | 失败请求 | 成功率 | QPS | 带宽(B/s) | 估算RTT(s) | | ---- | ----- | --------- | ------- | --------- | --------- | ----- | ------- | ---- | --------- | -------- | | 2000 | 900 | 472435 | 7874 | 7,086,000 | 7,086,000 | 0 | 100.0 % | 7874 | 1,062,991 | 0.254 | | 3000 | 900 | 426251 | 7104 | 6,393,766 | 6,393,765 | 1 | 100.0 % | 7104 | 959,072 | 0.422 | | 4000 | 900 | 323719 | 5395 | 4,857,887 | 4,851,912 | 3875 | 99.92 % | 5399 | 727,773 | 0.741 | | 6000 | 900 | 361223 | 6020 | 5,418,352 | 5,411,179 | 7173 | 99.87 % | 6020 | 811,499 | 0.997 | | 8000 | 900 | 291632 | 4861 | 4,374,485 | 4,361,284 | 13201 | 99.70 % | 4861 | 653,677 | 1.646 | 并发 2000 时达到峰值 QPS ≈ 7874,继续加压反而下降,说明服务端在 2000–3000 并发附近就已经出现瓶颈。 8000 并发时 QPS 掉到 4861,失败数破万,平均 RTT 拉到 1.6 s,系统明显过载。 最优并发区间:2000 左右,既保证吞吐量又不堆积过多失败。 **关键指标**: - 2k→8k 并发失败率均 < 0.3% - 成功率 99.7%+ - QPS 七千级波动 < 5% - 系统零崩溃、零重启 - 最优并发区间:2000 左右 ## 项目结构 ``` code/ ├── example/ # 示例代码 │ ├── any.cpp # 类型擦除实现 │ ├── bind.cpp # 绑定示例 │ ├── eventfd.c # eventfd 用法 │ ├── regex.cpp # 正则表达式示例 │ ├── request.cpp # 请求示例 │ ├── socket.cpp # Socket 编程示例 │ ├── timerfd.cpp # timerfd 用法 │ ├── timewheel.cpp # 时间轮定时器实现 │ └── Util_test.cc # 工具函数测试 ├── source/ # 核心源码 │ ├── EchoServer/ # Echo 回显服务器 │ ├── http/ # HTTP 服务器 │ │ └── wwwroot/ # Web 根目录 │ ├── server.hpp # 服务器头文件 │ └── main.cc # 主程序入口 ├── test/ # 测试代码 │ ├── server.cc # 服务器测试 │ ├── tcp.srv.cc # TCP 服务器测试 │ ├── tcp_cli.cc # TCP 客户端测试 │ └── client*.cpp # 多个客户端测试 └── WebBench-master/ # Web 压测工具 ``` ## 核心特性 - **Epoll 事件驱动**:基于 Linux Epoll 实现高效事件处理 - **多线程支持**:支持线程池处理并发连接 - **时间轮定时器**:高效的时间管理机制 - **HTTP 服务器**:支持静态文件服务和 RESTful API - **连接管理**:完善的连接生命周期管理 - **工具类**:提供 URL 编解码、文件操作等常用工具 ## 编译与运行 ### 编译 HTTP 服务器 ```bash cd code/source/http make ``` ### 运行 HTTP 服务器 ```bash ./httpserver ``` ### 编译 Echo 服务器 ```bash cd code/source/EchoServer make ``` ### 运行 Echo 服务器 ```bash ./main ``` ## 使用 WebBench 进行压测 ```bash cd code/WebBench-master make # 示例压测命令 ./webbench -c 2000 -t 90 http://localhost:8080/ ``` ## 示例代码 ### 时间轮定时器 (timewheel.cpp) ```cpp using TaskFunc = std::function; using ReleaseFunc = std::function; class TimerTask { uint64_t _id; uint32_t _timeout; bool _canceled; TaskFunc _task_cb; ReleaseFunc _release; public: TimerTask(uint64_t id, uint32_t delay, const TaskFunc &cb); void Cancel(); void SetRelease(const ReleaseFunc& cb); uint32_t DelayTime(); }; class TimerWheel { int _tick; int _capacity; std::vector> _wheel; std::unordered_map _timers; public: void TimerAdd(uint64_t id, uint32_t delay, const TaskFunc& cb); void TimerRefresh(uint64_t id); void TimerCancel(uint64_t id); void RunTimerTask(); }; ``` ### 类型擦除 (any.cpp) 提供类似 `std::any` 的类型擦除功能,支持存储任意类型值。 ## 技术栈 - C++11/14 - Linux Epoll - POSIX 线程 - TCP/IP 网络编程 ## 性能优化建议 1. **最优并发区间**:2000 并发左右可达最佳吞吐量 2. **CPU 绑定**:高并发场景可考虑 CPU 亲和性配置 3. **内存管理**:注意缓冲区大小配置,避免内存碎片 4. **网络调优**:调整内核参数以获得更好性能 ## 许可证 本项目仅供学习交流使用。 ## 作者 Accsen