116 lines
6.1 KiB
Markdown
116 lines
6.1 KiB
Markdown
# Cocoon 发展规划(自主维护)
|
||
|
||
> 此文件由 cron 任务每3小时更新,记录项目状态与下一步计划。
|
||
|
||
## 路线图
|
||
|
||
### Phase 1 — 核心稳定(当前)
|
||
- [x] HTTP/1.1 请求解析
|
||
- [x] 响应头格式化
|
||
- [x] 静态文件服务(sendfile)
|
||
- [x] 目录浏览
|
||
- [x] Range 请求
|
||
- [x] MIME 类型识别
|
||
- [x] 多线程 M:N 调度
|
||
- [x] 命令行参数
|
||
- [x] 优雅关闭
|
||
|
||
### Phase 2 — 健壮性
|
||
- [x] HTTP 缓存(ETag / Last-Modified / If-None-Match)✅ 2026-06-03
|
||
- [x] 连接超时管理(空闲连接自动清理)✅ 2026-06-03
|
||
- [x] 最大并发连接数限制 ✅ 2026-06-03
|
||
- [x] 分级日志系统(error / warn / info / debug)✅ 2026-06-03
|
||
- [x] Gzip 压缩 ✅ 2026-06-03(已接入响应流程)
|
||
- [x] Brotli 压缩 ✅ 2026-06-04(优先于 Gzip)
|
||
- [x] 集成测试 suite(37 项 curl/bash 测试全部通过)✅ 2026-06-04
|
||
- [x] 性能基准(wrk: ~16.2K RPS / ~60μs 延迟)✅ 2026-06-03
|
||
- [x] 请求体解析(POST 支持)✅ 2026-06-03
|
||
- Content-Length 读取
|
||
- JSON / form-urlencoded 回显
|
||
- **multipart/form-data 文件上传**(保存到 root_dir/uploads/)✅ 2026-06-04
|
||
- [x] C 语言单元测试框架 ✅ 2026-06-03(Unity 框架,125 个测试全部通过)
|
||
|
||
### Phase 3 — 扩展
|
||
- [x] **配置文件支持** — JSON 配置替代纯命令行 ✅ 2026-06-04
|
||
- [x] **Brotli 压缩** — 比 gzip 更高压缩率 ✅ 2026-06-04
|
||
- [x] **HTTPS / TLS** — OpenSSL Memory BIO 集成,支持命令行与配置文件启用 ✅ 2026-06-04
|
||
- [ ] HTTP/2 — nghttp2 骨架完成(编译通过),待 server.c 集成 ✅ 2026-06-04
|
||
- [ ] Windows 兼容性
|
||
|
||
### Phase 4 — 生态
|
||
- [ ] WebSocket 支持
|
||
- [ ] 中间件机制
|
||
- [ ] 插件系统
|
||
|
||
## 当前状态
|
||
|
||
- 编译通过,零警告(除 coco 子模块的 linker .note.GNU-stack 提示)
|
||
- **39 项集成测试全部通过**(GET/HEAD/POST/404/Range/304/gzip/brotli/MIME/目录浏览/路径防护/文件上传/TLS握手/HTTPS响应)
|
||
- **127 个单元测试全部通过**(Unity 框架,1 个忽略),新增 2 个 TLS 集成测试
|
||
- 压测数据:wrk -t4 -c100 -d10s → 16,179 RPS,平均延迟 59.86μs
|
||
- POST 支持:JSON 和 form-urlencoded 回显,multipart 文件上传,Content-Length 解析,8MB 上限
|
||
- **配置文件支持**:JSON 格式,8 个字段,命令行参数可覆盖
|
||
- **TLS/HTTPS**:OpenSSL 3.0 Memory BIO + coco 协程集成,自签名证书支持,sendfile 降级为缓冲读写
|
||
- **HTTP/2**:nghttp2 骨架完成(编译通过),流管理、回调框架就绪,待 server.c 集成(ALPN 协商、h2c 升级)
|
||
|
||
## 待办池
|
||
|
||
1. **[高] HTTP/2 多路复用** — 长期演进方向
|
||
2. **[中] Windows 兼容性** — 平台抽象层(platform.h / platform.c)
|
||
3. **[中] Doxygen 中文注释** — 所有模块的公共 API 需要完整文档
|
||
4. **[低] 检查远程更新内容** — 上游有 new commits,需 review 9041d8d
|
||
|
||
## 最近行动记录
|
||
|
||
- **2026-06-04: 本轮行动 — HTTP/2 骨架实现**
|
||
- 新增 `http2.c` / `http2.h`:基于 nghttp2 的 HTTP/2 会话管理
|
||
- 会话管理:fd → session 映射,最大 1024 并发会话
|
||
- 流管理:链表结构,支持请求解析和响应发送
|
||
- nghttp2 回调:send/receive、header 解析、frame 接收、stream 关闭
|
||
- 修复编译:匹配 `http_request_t` 结构(`num_headers`/`headers[]`),使用 `log_error` 替代 `LOG_ERROR`
|
||
- Makefile:加入 `http2.c`、链接 `-lnghttp2`
|
||
- 编译通过,零警告(除 coco 子模块 linker 提示)
|
||
- 推送到 main
|
||
- **待完成**:server.c 集成(TLS ALPN 协商、明文 h2c 升级魔术字检测)
|
||
- **2026-06-04: 本轮行动 — 实现 TLS/HTTPS 支持**
|
||
- 新增 `tls.c` / `tls.h`:OpenSSL 3.0 Memory BIO 与 coco 协程 I/O 集成
|
||
- `cocoon.h`:新增 `tls_enabled`, `tls_cert`, `tls_key` 配置字段
|
||
- `server.c`:accept 后执行 TLS 握手,读/写/关闭路由到 TLS 层
|
||
- `static.c`:TLS 连接降级 sendfile 为缓冲 read+write,修复 lseek 定位(压缩读取后重置文件位置)
|
||
- `config.c` / `config.h`:JSON 配置支持 `tls_cert`, `tls_key`, `tls_enabled`
|
||
- `main.c`:新增 `--cert`, `--key`, `--tls` CLI 选项
|
||
- `Makefile`:加入 `tls.c`,链接 `-lssl -lcrypto`
|
||
- 生成自签名测试证书 `tests/server.crt` / `tests/server.key`
|
||
- `tests/integration_test.sh`:新增 TLS 握手 + HTTPS 响应验证,修复 `kill_server` 匹配规则,curl 添加 `--max-time` 和 `-k`
|
||
- `tests/unit/test_config.c`:更新 `config_merge` 测试签名
|
||
- 单元测试:127 个通过(1 忽略),集成测试:39 个通过(含 2 个 TLS 测试)
|
||
- 推送到 main
|
||
- **2026-06-04: 本轮行动 — 修复拼写错误 + 扩展 server 单元测试(17 个)**
|
||
- `cocoon.h`:`COCOONForbidden` → `COCOON_FORBIDDEN`(统一下划线命名)
|
||
- `test_server.c`:从 5 个测试扩展到 17 个
|
||
- 空 root_dir 边界测试
|
||
- port=0(系统分配)和 port=65535 边界测试
|
||
- 多线程配置 + workers=0 自动检测测试
|
||
- timeout / max_connections 配置测试
|
||
- gzip/brotli 压缩标志测试
|
||
- stop → destroy 生命周期测试
|
||
- 多实例创建测试
|
||
- `server_start(NULL)` 参数校验测试
|
||
- 单元测试:125 个全部通过,集成测试:37 项全部通过
|
||
- 推送到 main(rebase 了远程更新 9041d8d)
|
||
- 2026-06-04: Brotli 压缩支持(优先于 Gzip)
|
||
- 2026-06-04: 配置文件支持 + gzip_enabled 控制 + README 修正
|
||
- 2026-06-04: multipart 文件上传
|
||
- 2026-06-03: 项目初始化,核心模块全部实现
|
||
- 2026-06-03: 添加缓存协商(ETag + Last-Modified + 304),修复编译警告
|
||
- 2026-06-03: 添加连接空闲超时管理 + 最大并发限制 + 分级日志系统
|
||
- 2026-06-03: 创建集成测试套件 + 性能基准 + 更新文档
|
||
- 2026-06-03: 添加 POST 请求体解析支持,30 项测试全部通过,README 更新
|
||
- 2026-06-03: **本轮行动 — 单元测试框架**
|
||
- 引入 Unity 测试框架(ThrowTheSwitch)
|
||
- 创建 `tests/unit/test_http.c`(35 个测试)
|
||
- 创建 `tests/unit/test_static.c`(31 个测试)
|
||
- 更新 Makefile:`make unit-test` 一键编译运行
|
||
- 66 个测试全部通过,集成测试保持 30 项通过
|
||
- 推送到 main
|