Back to VNotes

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 移除连接后链表状态没重置、静态路径拼接漏斜杠、日志影响压测结果。