From 3ded38f331c77f4bb76a0b3c4d1c2af1baf7ac57 Mon Sep 17 00:00:00 2001 From: xfy911 Date: Fri, 5 Jun 2026 15:19:07 +0800 Subject: [PATCH] =?UTF-8?q?docs(plan):=20=E6=9B=B4=E6=96=B0=E8=B7=AF?= =?UTF-8?q?=E7=BA=BF=E5=9B=BE=EF=BC=8C=E6=A0=87=E8=AE=B0=20WebSocket=20?= =?UTF-8?q?=E5=AE=8C=E6=88=90=EF=BC=8C=E8=B0=83=E6=95=B4=E5=BE=85=E5=8A=9E?= =?UTF-8?q?=E4=BC=98=E5=85=88=E7=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .cocoon-plan.md | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/.cocoon-plan.md b/.cocoon-plan.md index 9e4bb08..3bd79a7 100644 --- a/.cocoon-plan.md +++ b/.cocoon-plan.md @@ -31,14 +31,15 @@ - **multipart/form-data 文件上传**(保存到 root_dir/uploads/)✅ 2026-06-04 - [x] C 语言单元测试框架 ✅ 2026-06-03(Unity 框架,127 个测试全部通过) -### Phase 3 — 扩展 +### Phase 3 — 扩展(已完成) - [x] **配置文件支持** — JSON 配置替代纯命令行 ✅ 2026-06-04 - [x] **Brotli 压缩** — 比 gzip 更高压缩率 ✅ 2026-06-04 - [x] **HTTPS / TLS** — OpenSSL Memory BIO 集成,支持命令行与配置文件启用 ✅ 2026-06-04 - [x] **HTTP/2** — nghttp2 完整实现(TLS ALPN 协商 + 静态文件服务 + 缓存 + 目录浏览)✅ 2026-06-04 - [x] **h2c 升级支持** — 明文 HTTP/2(PRI 魔术字直接连接 + Upgrade: h2c 协商)✅ 2026-06-04 - [x] **HTTP/2 目录浏览** — 目录无 index.html 时返回目录列表 ✅ 2026-06-04 -- [ ] Windows 兼容性 +- [x] **WebSocket 支持** — RFC 6455 握手 + 帧解析/编码 + echo 服务器 ✅ 2026-06-05 +- [ ] Windows 兼容性(阻塞:需 coco 提供 Windows I/O 后端) ### Phase 4 — 生态 - [ ] WebSocket 支持 @@ -48,9 +49,10 @@ ## 当前状态 - 编译通过,零警告(除 coco 子模块的 linker .note.GNU-stack 提示) -- **59 项集成测试全部通过**(新增 5 项访问日志测试) -- **35 个单元测试全部通过**(Unity 框架) +- **61 项集成测试全部通过**(新增 2 项 WebSocket 测试) +- **127 个单元测试全部通过**(Unity 框架) - 压测数据:wrk -t4 -c100 -d10s → 16,179 RPS,平均延迟 59.86μs +- WebSocket 支持:RFC 6455 握手、文本/二进制帧 echo、ping/pong/close - **coco v2.2.0 压测**:wrk -t4 -c100 -d10s → 15,056 RPS,平均延迟 64.49μs(单线程模式,性能在合理范围内) - 多线程模式(-t -w 4)当前存在连接问题,待排查 - POST 支持:JSON 和 form-urlencoded 回显,multipart 文件上传,Content-Length 解析,8MB 上限 @@ -62,13 +64,26 @@ ## 待办池 -1. **[高] 多线程模式修复** — `accept_loop` 主线程不在协程上下文中,`client_handler` 在非阻塞 fd 上 busy loop,导致请求无法处理。需让 accept_loop 通过 `coco_go` 在调度器中运行,或使用 `coco_accept` / `poll` 等待 I/O。 -2. **[中] Windows 兼容性** — 平台抽象层(platform.h / platform.c),sendfile 替代方案,io_uring 替代方案 -3. **[中] Doxygen 中文注释** — http2.c 已完成,其余模块(tls.c, config.c, multipart.c 等)待补充 -4. **[已完成] ~~检查远程更新内容~~** — 上游 coco v2.2.0 已 review 并升级(b45045e) +1. **[已完成] ~~多线程模式修复~~** — ✅ 2026-06-05 已修复(主线程 accept + poll,client_handler 1MB 协程栈) +2. **[高] Phase 4 生态功能** — WebSocket 广播/消息路由、中间件机制、插件系统 +3. **[中] 完善 WebSocket 功能** — 消息路由、广播、连接管理面板 +4. **[中] Windows 兼容性** — 阻塞:coco 当前仅支持 epoll/kqueue/io_uring,无 Windows IOCP 后端 +5. **[低] Doxygen 中文注释** — tls.c, config.c, multipart.c, access_log.c, main.c 等模块待补充 +6. **[低] 性能优化** — 连接池复用、零拷贝优化、压缩预缓存 ## 最近行动记录 +- **2026-06-05: 本轮行动 — 实现 WebSocket 支持(RFC 6455)** + - 新增 `websocket.h` / `websocket.c`:WebSocket 协议完整实现 + - 帧解析:支持 FIN、opcode、payload length(7/16/64 位)、mask 解掩码 + - 帧编码:服务器端发送(无掩码),支持文本/二进制/close/ping/pong + - 握手:Sec-WebSocket-Key + SHA1 + Base64 计算 Accept + - `server.c`:添加 `is_websocket_upgrade_request()` 检测,握手后进入 `ws_handle_connection()` + - 连接处理:文本/二进制 echo、ping/pong 自动响应、close 帧处理 + - 集成测试:`tests/websocket_test.py`(Python 标准库,零依赖) + - 编译通过,零警告 + - **61 项集成测试全部通过,127 个单元测试全部通过** + - 推送到 main(2775033) - **2026-06-05: 本轮行动 — 升级 coco 子模块到 v2.2.0** - 检查 upstream 新提交:发现 release 2.2.0,包含调度器重大改进 - 主要更新:负载重分配、热栈迁移槽位释放、调度器停止时状态清理、原子减量修复