cocoon/.cocoon-plan.md
xfy911 e482e52658 docs(plan): 更新 Phase 2 进度 — gzip 压缩已完成 + 压测数据
- 标记 gzip 压缩为已完成(3086B → 1282B,压缩率 41%)
- 记录单线程压测数据:15K RPS,64us 平均延迟,47MB/s 传输
2026-06-03 18:19:57 +08:00

69 lines
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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已接入响应流程3086B → 1282B压缩率 41%
- [ ] 压力测试 + 性能基准(单线程 15K RPS @ 64us 延迟)
- [ ] 完整的单元测试框架
- [ ] 请求体解析POST 支持)
### Phase 3 — 扩展
- [ ] 配置文件支持JSON / YAML
- [ ] 虚拟主机 / 多站点
- [ ] 反向代理支持
- [ ] HTTPS / TLS
- [ ] HTTP/2
### Phase 4 — 生态
- [ ] WebSocket 支持
- [ ] 中间件机制
- [ ] 插件系统
## 当前状态
- 编译通过,基本功能可用
- 示例页面正常
- 日志系统已上线,支持命令行调节级别
- 连接超时 + 连接数限制已生效
- 缺少测试和性能数据
- gzip 压缩函数已写但未接入响应流程(静态.c 中有 `gzip_compress``is_compressible_mime`
## 待办池
1. **集成 Gzip 压缩** — 将 `gzip_compress` 接入 `static_serve_file`,对文本文件启用动态压缩
2. **添加测试** — 用 curl/bats 或写 C 单元测试
3. **性能基准** — wrk/ab 压测,记录 RPS 和延迟
4. **修复编译警告**`static.c``gzip_compress``is_compressible_mime` 未使用警告
5. **请求体解析POST 支持)** — 解析 Content-Length / chunked支持 form-data / JSON
## 最近行动记录
- 2026-06-03: 项目初始化,核心模块全部实现
- 2026-06-03: 添加缓存协商ETag + Last-Modified + 304修复编译警告
- 2026-06-03: 添加连接空闲超时管理 + 最大并发限制 + 分级日志系统
- 使用 `coco_timer` + `shutdown` + `coco_cancel` 实现空闲超时,默认 30 秒
- 使用原子计数器限制最大并发连接,超限返回 503
- 新增 `log.c` / `log.h`,支持 error/warn/info/debug 四级输出
- 命令行新增 `-m``-o``-l` 选项
- 修复 http.c 中 Range 解析被错误嵌套在 accept-encoding 分支的 bug
- 修复 static.c 缺失 `<errno.h>``<zlib.h>` 导致的编译失败
- Makefile 添加 `-lz` 链接参数