docs(plan): 更新规划文件 — 标记 WebSocket 单元测试完成

- 标记 Phase 2 WebSocket 单元测试完成(12 项测试)
- 更新单元测试总数:127 → 139
- 更新集成测试总数:66 → 68
- 标记 Phase 4 插件系统完成(MVP)
- 调整待办池优先级
This commit is contained in:
xfy911 2026-06-06 06:07:06 +08:00
parent faedbd55a8
commit f2231756a3

View File

@ -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] 集成测试 suite66 项 curl/bash 测试全部通过)✅ 2026-06-06
- [x] 集成测试 suite68 项 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-03Unity 框架127 个测试全部通过)
- [x] C 语言单元测试框架 ✅ 2026-06-03Unity 框架139 个测试全部通过)
- [x] **WebSocket 单元测试** ✅ 2026-06-0612 项,覆盖帧解析/编码/握手/粘包/大负载)
### 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-06MVPdlopen + 中间件注册 + 示例插件)
## 当前状态
- 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 + pollclient_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.cCMakeLists.txt 自动检测平台Makefile 在 Windows 下自动链接 ws2_32
- 配置文件支持JSON 格式13 个字段,命令行参数可覆盖
- 访问日志Nginx combined 格式,支持文件路径或 stdout`-`线程安全pthread_mutex记录 User-Agent / Referer / 状态码
- TLS/HTTPSOpenSSL 3.0 Memory BIO + coco 协程集成自签名证书支持ALPN 协商 h2/http1.1
- HTTP/2完整功能静态文件服务、目录浏览、缓存协商、压缩、HEAD 请求)
- h2c明文 HTTP/2 支持prior knowledge + Upgrade 协商)
- WebSocketRFC 6455 握手、文本/二进制帧 echo、ping/pong/close、**广播/频道**
- Windows 兼容性:跨平台抽象层 platform.h + platform.cCMakeLists.txt 自动检测平台Makefile 在 Windows 下自动链接 ws2_32
## 待办池
1. **[高] 插件系统** — ✅ 2026-06-06 已完成 MVPdlopen 动态加载、中间件注册、示例插件
- 后续扩展:插件配置文件数组支持、插件热重载、插件间通信
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.cWindows 下链接 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 项集成测试全部通过
- 推送到 mainfaedbd5
- 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个全部通过
- 编译零警告,推送到 main952cc66
- 2026-06-06: **本轮行动 — 中间件框架CORS / Basic Auth / Rate Limit**
- `middleware.c` / `middleware.h`:注册表(最多 16 个)+ 链式执行 + 短路机制