C++ WebServer / 13
项目总结:踩坑、收获和后续计划
这个项目最大的价值不是堆功能,而是把 Linux 后端服务器的关键状态亲手走了一遍:事件、缓冲区、线程、HTTP、长连接、写回、日志和压测。
这一阶段要解决什么问题
最后一篇用于总结项目对能力的证明:哪些问题真正踩过,哪些设计能讲清楚,后续还打算怎么继续迭代。
原来的实现有什么缺陷
项目从 v1.0 到 v5.5 的变化说明,初始版本只是最小闭环。真正让它接近工程的是后续不断补齐边界:非阻塞读写、用户态缓冲、HTTP 状态机、超时清理、日志配置和压测。
我是怎么改的
我把服务器从阻塞式 echo server 演进到 epoll + 线程池 HTTP server。过程中保持主 Reactor 管理 fd 生命周期,工作线程处理请求任务,Connection 保存连接状态。
核心代码 / 关键逻辑
- Socket 编程基本流程
- epoll 事件驱动模型
- LT / ET 模式差异
- 非阻塞 I/O 和 EAGAIN
- TCP 字节流和用户态缓冲区
- HTTP 报文解析
- 线程池与任务队列
- ApacheBench 压测和性能观察
踩坑记录
最典型的坑包括:ET 模式没有循环 read、HTTP header 边界定位错误、非阻塞写没有保存完整进度、TimerWheel 移除连接后链表状态没重置、静态路径拼接漏斜杠、日志影响压测结果。