diff --git a/.cocoon-plan.md b/.cocoon-plan.md index d436c59..1661d78 100644 --- a/.cocoon-plan.md +++ b/.cocoon-plan.md @@ -44,9 +44,10 @@ - [x] gRPC 支持 — gRPC over HTTP/2 + protobuf LEB128 帧 + 四种 RPC 模式 + gRPC-Web 兼容 - [x] 更多内置中间件 — JWT Auth(HS256) + Security Headers + Request ID + IP 过滤 -### Phase 5 — 应用网关(规划中) -- [ ] **FastCGI 支持** — 对接 PHP-FPM、uWSGI,这是 Nginx 的核心功能,cocoon 还缺 -- [ ] **反向代理连接池** — HTTP/1.1 后端连接复用,减少握手开销(目前每请求都新建连接) +### Phase 5 — 应用网关(进行中) +- [x] **FastCGI 协议核心** — 记录编码/解码、参数序列化、响应解析、连接池基础 +- [ ] **FastCGI 服务器集成** — 将 FastCGI 接入 server.c 请求处理流程,对接 PHP-FPM +- [ ] **反向代理连接池** — HTTP/1.1 后端连接复用,减少握手开销 - [ ] **配置热重载校验** — 新配置语法校验失败时拒绝重载,避免把服务搞坏 - [ ] **内存响应缓存** — 基于 LRU + TTL,文件不大时直接缓存到内存,避免重复磁盘 I/O - [ ] **管理 Dashboard** — 内置 `/_status` 页面,SSE 实时推送指标,像 HAProxy stats 那种 @@ -87,6 +88,26 @@ ## 维护记录(Phase 5 — 自然扩展) ++ 2026-06-15 08:17: **Phase 5 — FastCGI 协议核心实现** + - 新增 `fastcgi.c` / `fastcgi.h`:FastCGI 1.0 协议客户端完整实现 + - 记录编码/解码:BEGIN_REQUEST、PARAMS、STDIN、STDOUT、STDERR、END_REQUEST + - 名值对编码:支持短长度(<128)和长长度(4 bytes)编码 + - 参数管理:CGI 环境变量(SCRIPT_NAME、REQUEST_METHOD 等) + - 响应解析:流式解析,自动重组 stdout/stderr 数据 + - 状态码提取:从 Status: 头提取 HTTP 状态码(默认 200) + - 响应体提取:从 stdout 数据解析出 HTTP body + - 连接池:预创建连接、获取/归还、连接可用性检测 + - 完整请求流程:发送 BeginRequest → Params → Stdin → 接收响应 + - 新增 `tests/unit/test_fastcgi.c`:17 项单元测试 + - 覆盖记录编码/解码、名值对编码、参数管理、响应解析、状态码提取、Body 提取 + - 更新 Makefile:添加 fastcgi.c 和 test_fastcgi 编译规则 + - 更新 `.gitignore`:修复 `tests/unit/test_*` 规则,确保 .c 源文件被跟踪 + - 编译验证:零警告,全部通过 + - 单元测试:475 个全部通过 ✓(458 原有 + 17 新增 FastCGI 测试) + - 集成测试:115 项全部通过 ✓ + - 提交已推送到 origin main(`57948d9`) + - 项目状态:Phase 5 启动,FastCGI 协议核心已完成,待接入服务器请求处理流程 + + 2026-06-15 06:17: **维护验证 — 定期巡检状态确认** - 编译验证:零警告,make 全部通过(唯一 linker 警告来自外部 coco 库的 `.note.GNU-stack` section,非项目本身问题) - 单元测试:458 个全部通过 ✓(1 个 Ignored,为预期行为)