10 KiB
10 KiB
Cocoon 发展规划(自主维护)
此文件由 cron 任务每3小时更新,记录项目状态与下一步计划。
路线图
Phase 1 — 核心稳定(已完成)
- HTTP/1.1 请求解析
- 响应头格式化
- 静态文件服务(sendfile)
- 目录浏览
- Range 请求
- MIME 类型识别
- 多线程 M:N 调度
- 命令行参数
- 优雅关闭
Phase 2 — 健壮性(已完成)
- HTTP 缓存(ETag / Last-Modified / If-None-Match)
- Gzip / Brotli 压缩
- 完整的单元测试框架
- 压力测试 + 性能基准
- 连接超时管理(空闲连接自动清理)
- 请求体解析(POST 支持)
Phase 3 — 扩展(已完成)
- 配置文件支持(JSON)
- 虚拟主机 / 多站点
- 反向代理支持
- HTTPS / TLS
- HTTP/2
- h2c 明文升级
- WebSocket 支持
- 中间件机制(CORS / Basic Auth / Rate Limit)
- 插件系统(动态加载 + 热重载)
- 健康检查端点
- 主动健康检查
- Prometheus 指标
- SIGHUP 配置热重载
Phase 4 — 生态(已完成 ✅)
- HTTP/3 (QUIC) — QUIC 传输层 + HTTP/3 帧处理 + QPACK 静态表 + TLS 1.3 接口
- 分布式负载均衡 — 一致性哈希 + 最少连接 + 加权响应时间(EWMA) + 随机
- gRPC 支持 — gRPC over HTTP/2 + protobuf LEB128 帧 + 四种 RPC 模式 + gRPC-Web 兼容
- 更多内置中间件 — JWT Auth(HS256) + Security Headers + Request ID + IP 过滤
Phase 5 — 应用网关(进行中)
- FastCGI 协议核心 — 记录编码/解码、参数序列化、响应解析、连接池基础
- FastCGI 服务器集成 — 将 FastCGI 接入 server.c 请求处理流程,对接 PHP-FPM
- 反向代理连接池 — HTTP/1.1 后端连接复用,减少握手开销
- 配置热重载校验 — 新配置语法校验失败时拒绝重载,避免把服务搞坏
- 内存响应缓存 — 基于 LRU + TTL,文件不大时直接缓存到内存,避免重复磁盘 I/O
- 管理 Dashboard — 内置
/_status页面,SSE 实时推送指标,像 HAProxy stats 那种 - ACME / Let's Encrypt 自动证书 — 无需手动配置,自动签发续期
- 带宽限速 / 流量整形 — 按连接或全局限速,防止突发流量打满带宽
- YAML / TOML 配置格式 — 配置验证时更友好
- systemd 服务文件 — 一键安装成系统服务
- Docker 多阶段构建 — 减小最终镜像
Phase 6 — 硬核深潜(远期规划)
- io_uring 接入 — 小文件走 io_uring 而非 sendfile,HTTP/2 多路复用下理论上能再提一波
- HTTP/3 完整握手(0-RTT) — 目前 QUIC 骨架搭好了,可以再加 resumption 和新令牌
- WAF 规则引擎 — 轻量级 Web 应用防火墙,正则匹配 + 可配置规则集
- 模糊测试(libFuzzer) — 用 AFL/libFuzzer 跑 HTTP 解析器,找溢出和崩溃
- QPACK 动态表 — 目前 HTTP/3 只有静态表,动态表是 RFC 9204 的完整实现
- gRPC 反射 + 健康检查 — 支持 gRPC reflection 服务,服务网格里更方便
当前状态
- 编译状态:零警告,全部通过(2026-06-15 15:17 验证)
- 单元测试:465 个全部通过 ✓(1 个 Ignored,为预期行为)
- 集成测试:115 项全部通过 ✓
- 代码覆盖率:核心模块覆盖完整,Phase 4 模块覆盖良好
- 文档状态:README 完整,API 文档齐全,.cocoon-plan.md 已更新
- 项目阶段:Phase 1~4 全部完成,Phase 5 规划中
- 代码规模:28,000+ 行 C 代码(不含 coco 子模块),458 单元测试 + 115 集成测试
待办池(Phase 5 — 自然扩展)
2026-06-15 规划:Phase 5 路线图
- FastCGI 支持 — 当前最优先,对标 Nginx 核心能力
- 连接池 — 性能优化,HTTP/1.1 后端连接复用
- 配置热重载校验 — 安全加固,防止坏配置导致服务中断
- 内存缓存、Dashboard、ACME 等后续按优先级推进
维护记录(Phase 5 — 自然扩展)
2026-06-15 15:17: Phase 5 — 配置热重载校验
- 新增
config_validate(): 在配置热重载前对配置进行完整校验 - 校验项覆盖:端口、工作线程、连接数、超时、日志级别范围检查
- 成对字段校验:TLS 证书/密钥、Basic Auth 用户名/密码必须同时存在
- 代理规则、虚拟主机、FastCGI 规则完整性及边界校验
server_reload_config()集成校验:新配置加载后先校验,失败则拒绝重载并保留旧配置,避免坏配置搞崩服务- 新增 22 项单元测试,覆盖 config_validate 全部场景
- 编译验证:零警告,全部通过
- 单元测试:465 个全部通过 ✓(443 原有 + 22 新增校验测试)
- 集成测试:115 项全部通过 ✓(含 SIGHUP 热重载测试,验证旧配置保留行为)
- 提交已推送到 origin main(
f037dda) - 项目状态:Phase 5 进行中,配置热重载校验已完成,下阶段目标:内存响应缓存
-
2026-06-15 12:17: Phase 5 — 反向代理连接池完善
- 新增
proxy_pool_conn_is_alive(): 使用recv(MSG_PEEK | MSG_DONTWAIT)非阻塞检测连接是否被对端关闭 - 复用前自动剔除失效连接,避免将已关闭的连接再次用于转发请求
- 新增
cocoon_pool_stats_t统计结构:总请求、命中、新建、超时驱逐、有效性检测失败、活跃/空闲连接数 - 连接池
acquire/release全流程统计追踪,便于运维观测 - 新增 7 项 proxy 单元测试:连接有效性检测(3 项)、acquire/release 复用循环、空池新建失败边界、统计初始状态
- 编译验证:零警告,全部通过
- 单元测试:465 个全部通过 ✓(458 原有 + 7 新增连接池测试)
- 集成测试:115 项全部通过 ✓
- 提交已推送到 origin main(
b426ab7) - 项目状态:Phase 5 进行中,反向代理连接池已完成,下阶段目标:配置热重载校验
- 新增
-
2026-06-15 09:17: Phase 5 — FastCGI 服务器集成完成
- 新增
fcgi_handler.h/fcgi_handler.c:FastCGI 请求处理器- 路由匹配:基于前缀匹配,支持最长路径匹配
- CGI 参数构建:从 HTTP 请求提取 REQUEST_METHOD、SCRIPT_NAME、PATH_INFO、QUERY_STRING 等标准 CGI 变量
- HTTP 头转 CGI 变量:Host 等头自动转为 HTTP_ 前缀大写环境变量
- 响应解析:检测 HTTP/ 开头的完整响应直接透传;否则解析 Status: 头或默认 200
- 连接池:TCP / Unix Socket 复用,支持 pool_size 和 timeout_ms 配置
- 配置解析扩展(
config.c):- 新增
cocoon_fcgi_rule_t/cocoon_fcgi_config_t结构体 - 命令行支持:--fastcgi-prefix、--fastcgi-target、--fastcgi-pool-size、--fastcgi-timeout
- 配置文件支持:fastcgi 规则段,最大 4 条规则
- 新增
- 请求处理链集成(
server.c):- 在
handle_request中反向代理之后、GET/HEAD 检查之前插入 FastCGI 分发 server_context添加fcgi_config字段server_create中调用fcgi_handler_init初始化连接池server_destroy中调用fcgi_handler_destroy释放资源
- 在
Makefile更新:加入fcgi_handler.c编译目标,测试规则同步更新.gitignore修复:拆分tests/unit/test_*.otests/fixtures/uploads/为独立规则- 编译验证:零警告,全部通过
- 单元测试:458 个全部通过 ✓(1 个 Ignored,为预期行为)
- 集成测试:115 项全部通过 ✓
- 提交已推送到 origin main(
a09452b) - 项目状态:Phase 5 进行中,FastCGI 服务器集成已完成,下阶段目标:反向代理连接池
- 新增
-
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-stacksection,非项目本身问题) - 单元测试:458 个全部通过 ✓(1 个 Ignored,为预期行为)
- 集成测试:115 项全部通过 ✓(含 HTTP/3、gRPC、负载均衡、扩展中间件、虚拟主机、SIGHUP 热重载、主动健康检查、Prometheus 指标、SSE 端到端等)
- 代码检查:无遗留 TODO/FIXME,cocoon 源码干净
- 编译产物检查:无误跟踪二进制文件,
.gitignore规则完整覆盖 - 工作区干净:无未提交改动,无需提交
- 项目状态健康,所有路线图功能(Phase 1~4)已完成,维护模式正常
- Phase 5 路线图规划完成:FastCGI / 连接池 / 配置热重载校验 为优先项
- 编译验证:零警告,make 全部通过(唯一 linker 警告来自外部 coco 库的