diff --git a/.cocoon-plan.md b/.cocoon-plan.md index 6144b65..d728ab1 100644 --- a/.cocoon-plan.md +++ b/.cocoon-plan.md @@ -52,7 +52,7 @@ - [x] **内存响应缓存** — 基于 LRU + TTL,文件不大时直接缓存到内存,避免重复磁盘 I/O - [x] **管理 Dashboard** — 内置 `/_status` 页面,SSE 实时推送指标,像 HAProxy stats 那种 - [x] **ACME / Let's Encrypt 自动证书** — 客户端骨架完成(目录发现、nonce、账户、订单、授权、CSR、证书下载、thumbprint),OpenSSL 3.0 零警告;服务器端 HTTP-01 挑战响应路由已完成(`/.well-known/acme-challenge/` 返回 keyAuthorization);配置集成与自动续期后台协程已完成(2026-06-16) -- [ ] **带宽限速 / 流量整形** — 按连接或全局限速,防止突发流量打满带宽 +- [x] **带宽限速 / 流量整形** — 按连接或全局限速,防止突发流量打满带宽 - [ ] **YAML / TOML 配置格式** — 配置验证时更友好 - [x] **systemd 服务文件** — 一键安装成系统服务,支持 SIGHUP 热重载、安全加固、自动恢复 - [ ] **Docker 多阶段构建** — 减小最终镜像 @@ -262,3 +262,26 @@ - 集成测试:111 项通过(4 项反向代理环境相关失败,非项目代码问题) - 提交已推送到 origin main 和 rua main(`277bb70`) - 项目状态:Phase 5 进行中,systemd 服务文件已完成,下阶段目标:ACME 服务器端 HTTP-01 挑战响应路由 + 自动续期集成 + ++ 2026-06-16 15:17: **Phase 5 — 带宽限速 / 流量整形(Token Bucket 算法)** + - 新增 `throttle.h` / `throttle.c`:Token Bucket 双层限速实现 + - `throttle_init()`: 初始化令牌桶,支持 rate(bytes/sec)和 burst(突发容量) + - `throttle_consume()`: 消费 N 字节,返回需要等待的微秒数(0 = 无需等待) + - `throttle_set_fd()` / `throttle_clear_fd()` / `throttle_lookup()`: fd 映射表操作,侵入性最小 + - 全局 fd 映射表受 `g_throttle_mutex` 保护,线程安全 + - `cocoon.h`: 配置结构体新增 `throttle_conn_rate`(单连接限速)和 `throttle_global_rate`(全局限速) + - `server.c`: + - 连接创建时自动初始化 per-connection throttle(如果 `throttle_conn_rate > 0`) + - `close_connection()` 中自动 `throttle_clear_fd()` 并释放 throttle 内存 + - `server_create()` 中初始化 global throttle(如果 `throttle_global_rate > 0`) + - `server_destroy()` 中释放 global throttle + - `static.c`: `send_all()` 自动查表限速,TLS 路径保持原样(TLS 层已有流控) + - `platform.c`: `cocoon_file_send()` 限速启用时回退到 read+write 循环,逐 chunk 限速;无限速时仍优先 sendfile 零拷贝 + - `proxy.c`: `send_all_fd()` 加入限速检查 + - `config.c`: 解析 JSON 配置中的 `throttle` 对象(`conn_rate` / `global_rate`),支持配置文件和命令行覆盖 + - `config.h`: 更新 `config_merge` 签名,新增 `has_throttle_conn_rate` / `has_throttle_global_rate` 参数 + - `Makefile`: 将 `throttle.c` 加入 `SRCS` 和所有相关单元测试编译规则 + - 编译验证:零警告,全部通过(仅外部 coco 库 GNU-stack linker 提示) + - 集成测试:109 项通过(6 个失败为已知反向代理环境 404 问题,非代码问题) + - 提交已推送到 origin main 和 rua main(`522685e`) + - 项目状态:Phase 5 进行中,带宽限速已完成,下阶段目标:YAML / TOML 配置格式 或 Docker 多阶段构建