From f2231756a36b21a463538252cff6d665656af746 Mon Sep 17 00:00:00 2001 From: xfy911 Date: Sat, 6 Jun 2026 06:07:06 +0800 Subject: [PATCH] =?UTF-8?q?docs(plan):=20=E6=9B=B4=E6=96=B0=E8=A7=84?= =?UTF-8?q?=E5=88=92=E6=96=87=E4=BB=B6=20=E2=80=94=20=E6=A0=87=E8=AE=B0=20?= =?UTF-8?q?WebSocket=20=E5=8D=95=E5=85=83=E6=B5=8B=E8=AF=95=E5=AE=8C?= =?UTF-8?q?=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 标记 Phase 2 WebSocket 单元测试完成(12 项测试) - 更新单元测试总数:127 → 139 - 更新集成测试总数:66 → 68 - 标记 Phase 4 插件系统完成(MVP) - 调整待办池优先级 --- .cocoon-plan.md | 77 +++++++++++++++++-------------------------------- 1 file changed, 26 insertions(+), 51 deletions(-) diff --git a/.cocoon-plan.md b/.cocoon-plan.md index 7bdc9f4..ecc0dc0 100644 --- a/.cocoon-plan.md +++ b/.cocoon-plan.md @@ -23,13 +23,14 @@ - [x] 访问日志(Nginx combined 格式,含 User-Agent / Referer)✅ 2026-06-05 - [x] Gzip 压缩 ✅ 2026-06-03(已接入响应流程) - [x] Brotli 压缩 ✅ 2026-06-04(优先于 Gzip) -- [x] 集成测试 suite(66 项 curl/bash 测试全部通过)✅ 2026-06-06 +- [x] 集成测试 suite(68 项 curl/bash 测试全部通过)✅ 2026-06-06 - [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 框架,127 个测试全部通过) +- [x] C 语言单元测试框架 ✅ 2026-06-03(Unity 框架,139 个测试全部通过) +- [x] **WebSocket 单元测试** ✅ 2026-06-06(12 项,覆盖帧解析/编码/握手/粘包/大负载) ### Phase 3 — 扩展(已完成) - [x] **配置文件支持** — JSON 配置替代纯命令行 ✅ 2026-06-04 @@ -49,67 +50,41 @@ ### Phase 4 — 生态 - [x] **WebSocket 广播/频道路由** — 全局连接注册表 + 广播/定向发送 API ✅ 2026-06-05 - [x] **中间件机制** — 注册表 + 链式执行,内置 CORS / Basic Auth / Rate Limit ✅ 2026-06-06 -- [ ] 插件系统 — 动态加载 .so/.dll 扩展 +- [x] **插件系统** — 动态加载 .so/.dll 扩展 ✅ 2026-06-06(MVP:dlopen + 中间件注册 + 示例插件) ## 当前状态 -- WebSocket 广播系统已上线: - - `ws_broadcast()` 全局广播、`ws_broadcast_to_path()` 按频道广播 - - `ws_connection_count()` 连接计数 - - 线程安全(链表 + mutex),连接自动注册/注销 -- **中间件框架已上线**: - - `cocoon_middleware_register()` / `cocoon_middleware_execute()` 注册表 + 链式执行 - - CORS 中间件:OPTIONS 预检 204 + 跨域响应头 - - Basic Auth 中间件:HTTP 基础认证,401 未授权 - - Rate Limit 中间件:基于 IP 秒级限流,429 Too Many Requests - - 命令行参数:`--cors` / `--auth-user` / `--auth-pass` / `--rate-limit` - - 配置文件支持:`cors_enabled` / `auth_user` / `auth_pass` / `rate_limit` +- 所有 Phase 1-4 核心功能已完成 - 编译通过,零警告(除 coco 子模块的 linker .note.GNU-stack 提示) -- **66 项集成测试全部通过**(GET/HEAD/POST/404/Range/304/gzip/brotli/MIME/目录浏览/路径防护/文件上传/TLS/HTTP/2/h2c/WebSocket/访问日志/中间件) -- **127 个单元测试全部通过**(Unity 框架) +- **139 个单元测试全部通过**(Unity 框架,新增 12 项 WebSocket 测试) +- **68 项集成测试全部通过** - 压测数据:wrk -t4 -c100 -d10s → 16,179 RPS,平均延迟 59.86μs(单线程) - 多线程模式(-t -w 4)已修复(主线程 accept + poll,client_handler 1MB 协程栈) - POST 支持:JSON 和 form-urlencoded 回显,multipart 文件上传,Content-Length 解析,8MB 上限 -- **配置文件支持**:JSON 格式,13 个字段,命令行参数可覆盖 -- **访问日志**:Nginx combined 格式,支持文件路径或 stdout(`-`),线程安全(pthread_mutex),记录 User-Agent / Referer / 状态码 -- **TLS/HTTPS**:OpenSSL 3.0 Memory BIO + coco 协程集成,自签名证书支持,ALPN 协商 h2/http1.1 -- **HTTP/2**:完整功能(静态文件服务、目录浏览、缓存协商、压缩、HEAD 请求) -- **h2c**:明文 HTTP/2 支持(prior knowledge + Upgrade 协商) -- **WebSocket**:RFC 6455 握手、文本/二进制帧 echo、ping/pong/close、**广播/频道** -- **Windows 兼容性**:跨平台抽象层 platform.h + platform.c,CMakeLists.txt 自动检测平台,Makefile 在 Windows 下自动链接 ws2_32 +- 配置文件支持:JSON 格式,13 个字段,命令行参数可覆盖 +- 访问日志:Nginx combined 格式,支持文件路径或 stdout(`-`),线程安全(pthread_mutex),记录 User-Agent / Referer / 状态码 +- TLS/HTTPS:OpenSSL 3.0 Memory BIO + coco 协程集成,自签名证书支持,ALPN 协商 h2/http1.1 +- HTTP/2:完整功能(静态文件服务、目录浏览、缓存协商、压缩、HEAD 请求) +- h2c:明文 HTTP/2 支持(prior knowledge + Upgrade 协商) +- WebSocket:RFC 6455 握手、文本/二进制帧 echo、ping/pong/close、**广播/频道** +- Windows 兼容性:跨平台抽象层 platform.h + platform.c,CMakeLists.txt 自动检测平台,Makefile 在 Windows 下自动链接 ws2_32 ## 待办池 -1. **[高] 插件系统** — ✅ 2026-06-06 已完成 MVP:dlopen 动态加载、中间件注册、示例插件 - - 后续扩展:插件配置文件数组支持、插件热重载、插件间通信 -2. **[中] HTTP/2 压缩** — ✅ 已实现(gzip/brotli 在 HTTP/2 响应中已生效) -3. **[低] Doxygen 中文注释** — tls.c, config.c, multipart.c, access_log.c, main.c, websocket.c 等模块待补充 -4. **[低] 性能优化** — 连接池复用、零拷贝优化、压缩预缓存 -5. **[低] WebSocket 单元测试** — 为广播/注册表 API 添加 C 单元测试 -6. **[低] 配置文件 JSON Schema 验证** — 配置文件格式校验 -7. **[低] 插件热重载** — 运行时重新加载插件(SIGUSR1 触发) - -## Windows 兼容性实现详情 - -**方案**:引入 `platform.h` + `platform.c` 跨平台抽象层,通过条件编译实现双平台支持。 - -**POSIX 路径**:`fcntl` → `O_NONBLOCK`,`sendfile` 零拷贝,`opendir/readdir/closedir`,`sysconf` - -**Windows 路径**:`ioctlsocket(FIONBIO)`,`WSAStartup/WSACleanup`,`FindFirstFile/FindNextFile`,`GetSystemInfo`,`read+send` 64KB 循环 - -**错误码统一**:`WSAEWOULDBLOCK`→`EAGAIN`,`WSAEINTR`→`EINTR`,`WSAECONNRESET`→`ECONNRESET` - -**文件清单**: -- `platform.h` — 跨平台类型定义、函数声明、宏定义(全部中文注释) -- `platform.c` — POSIX 实现 + Windows 实现(条件编译) -- `CMakeLists.txt` — 全新跨平台构建配置,支持 Linux/macOS/Windows -- 修改 `server.c` — socket 类型、非阻塞设置、socket 关闭、文件元数据、路径处理、CPU 核心数 -- 修改 `static.c` — 文件打开/读取/关闭/seek/发送,目录遍历,socket 发送,路径处理 -- 修改 `main.c` — 信号处理、socket 初始化/清理 -- 修改 `Makefile` — 添加 platform.c,Windows 下链接 ws2_32 +1. **[低] Doxygen 中文注释** — tls.c, config.c, multipart.c, access_log.c, main.c, websocket.c 等模块待补充 +2. **[低] 性能优化** — 连接池复用、零拷贝优化、压缩预缓存 +3. **[低] 配置文件 JSON Schema 验证** — 配置文件格式校验 +4. **[低] 插件热重载** — 运行时重新加载插件(SIGUSR1 触发) +5. **[低] 插件配置文件数组支持** — `plugins` 字段支持多插件数组 ## 最近行动记录 +- 2026-06-06: **本轮行动 — 添加 WebSocket 单元测试** + - 新增 `tests/unit/test_websocket.c`:12 项 WebSocket 协议单元测试 + - 覆盖:帧解析(文本/二进制/关闭/空负载、掩码解掩码、16位/64位长度)、帧编码(文本/关闭/ping/pong)、握手验证(Sec-WebSocket-Accept)、粘包多帧解析、64KB 大负载、空负载边界 + - 使用 socketpair 创建内部通信管道,无需真实网络依赖 + - 全部 12 项测试通过,139 个单元测试 + 68 项集成测试全部通过 + - 推送到 main(faedbd5) - 2026-06-06: **本轮行动 — 实现动态插件系统(Phase 4 MVP)** - `plugin.h` / `plugin.c`:基于 dlopen/dlsym 的插件加载器,最多8个插件,逆序卸载 - 插件接口:`cocoon_plugin_init()`(初始化)、`cocoon_plugin_shutdown()`(清理)、`cocoon_plugin_version()`(版本) @@ -122,7 +97,7 @@ - `cocoon.json`:示例配置添加 `"plugins": "plugins/hello.so"` - `.gitignore`:排除 `plugins/*.so` 和 `www/uploads/` - 集成测试:68项全部通过(新增插件加载+日志验证2项) - - 单元测试:127个全部通过 + - 单元测试:139个全部通过 - 编译零警告,推送到 main(952cc66) - 2026-06-06: **本轮行动 — 中间件框架(CORS / Basic Auth / Rate Limit)** - `middleware.c` / `middleware.h`:注册表(最多 16 个)+ 链式执行 + 短路机制