一、项目背景与核心价值
作为后端开发 / 网络编程学习者,「手写 HTTP 服务器」是理解Linux I/O 多路复用、并发模型、协议解析的经典实践。这个项目基于《Linux 高性能服务器编程》的单 Reactor + 线程池半同步半异步模型实现,覆盖epoll事件管理、线程池、定时器、HTTP协议解析等核心技术点,适合 C++/Linux 网络编程入门进阶。
二、核心技术栈与架构
1. 技术栈
- 语言:C++17(利用现代 C++ 特性简化代码)
- 构建工具:CMake 3.10+
- 运行环境:Linux(依赖 epoll、信号处理等系统调用)
- 核心依赖:无第三方库,纯原生 Linux API 实现
2. 架构设计(单 Reactor + 线程池)
半同步半异步模型的经典落地:
- Reactor 线程(主线程):负责
epoll事件监听、连接管理、信号处理,将 I/O 事件(如客户端数据)封装为任务,提交给线程池; - 线程池(工作线程):负责
HTTP请求解析、响应构建、业务逻辑处理,实现 I/O 与计算的分离,提升并发能力。
客户端请求 → epoll监听(Reactor线程) → 封装任务 → 线程池处理 → HTTP响应 → 客户端三、核心模块实现
项目拆分为 9 个核心模块,每个模块职责单一,便于扩展:
| 模块名 | 功能说明 |
|---|---|
| 主模块 | main.cpp:初始化 epoll、注册信号,驱动 Reactor 事件循环 |
| epoll 模块 | epoll_config.h/epoll_manager.cpp:封装 epoll 的add/mod/del操作,实现事件监听与分发 |
| HTTP 模块 | http.h/http.cpp:解析 HTTP/1.0 GET 请求,构建响应(后续可扩展 HTTP/1.1) |
| 线程池模块 | Pool.h/Pool.cpp:实现线程监控、任务队列、异常处理,支持动态调整线程数 |
| 定时器模块 | timer.h/timer_manager.cpp:基于时间轮实现客户端超时管理,清理空闲连接 |
| 日志模块 | Log.h/Log.cpp:多等级(DEBUG/INFO/ERROR)日志,保证线程安全打印 |
| 守护进程模块 | daemon.cpp:将进程转为守护进程,实现后台运行、资源初始化 |
| 用户模块 | 封装recv/send等系统调用,实现非阻塞 I/O、数据收发的统一管理 |
| 信号模块 | signal_manager.cpp:处理 SIGTERM/SIGINT 等信号,实现优雅停机 |
plaintext
HTTP/1.0 200 OK Content-Length: 12 Content-Type: text/plain Hello World!四、功能介绍(欢迎贡献)
目前项目处于开发阶段,只实现了大概框架,后续计划实现:
- 支持 HTTP/1.1 协议(长连接、管线化);
- 实现 POST 请求解析,支持表单数据处理;
- 增加静态资源服务(加载 HTML/CSS/ 图片);
- 实现配置文件,支持端口、线程数等动态配置;
- 完善压力测试脚本,优化性能瓶颈。
五、项目地址与参与方式
- GitHub 仓库:https://github.com/yy782/programs
- 参与方式:
- 提 Issue:反馈 bug / 建议新功能;
- 提 PR:基于main分支开发,遵循代码风格即可。
本文项目为学习实践作品,欢迎各位开发者交流、批评、共建,一起完善这个高性能 HTTP 服务器~