docs(plan): 更新规划文件 — 标记 WebSocket 单元测试完成
- 标记 Phase 2 WebSocket 单元测试完成(12 项测试) - 更新单元测试总数:127 → 139 - 更新集成测试总数:66 → 68 - 标记 Phase 4 插件系统完成(MVP) - 调整待办池优先级
This commit is contained in:
parent
faedbd55a8
commit
f2231756a3
@ -23,13 +23,14 @@
|
|||||||
- [x] 访问日志(Nginx combined 格式,含 User-Agent / Referer)✅ 2026-06-05
|
- [x] 访问日志(Nginx combined 格式,含 User-Agent / Referer)✅ 2026-06-05
|
||||||
- [x] Gzip 压缩 ✅ 2026-06-03(已接入响应流程)
|
- [x] Gzip 压缩 ✅ 2026-06-03(已接入响应流程)
|
||||||
- [x] Brotli 压缩 ✅ 2026-06-04(优先于 Gzip)
|
- [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] 性能基准(wrk: ~16.2K RPS / ~60μs 延迟)✅ 2026-06-03
|
||||||
- [x] 请求体解析(POST 支持)✅ 2026-06-03
|
- [x] 请求体解析(POST 支持)✅ 2026-06-03
|
||||||
- Content-Length 读取
|
- Content-Length 读取
|
||||||
- JSON / form-urlencoded 回显
|
- JSON / form-urlencoded 回显
|
||||||
- **multipart/form-data 文件上传**(保存到 root_dir/uploads/)✅ 2026-06-04
|
- **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 — 扩展(已完成)
|
### Phase 3 — 扩展(已完成)
|
||||||
- [x] **配置文件支持** — JSON 配置替代纯命令行 ✅ 2026-06-04
|
- [x] **配置文件支持** — JSON 配置替代纯命令行 ✅ 2026-06-04
|
||||||
@ -49,67 +50,41 @@
|
|||||||
### Phase 4 — 生态
|
### Phase 4 — 生态
|
||||||
- [x] **WebSocket 广播/频道路由** — 全局连接注册表 + 广播/定向发送 API ✅ 2026-06-05
|
- [x] **WebSocket 广播/频道路由** — 全局连接注册表 + 广播/定向发送 API ✅ 2026-06-05
|
||||||
- [x] **中间件机制** — 注册表 + 链式执行,内置 CORS / Basic Auth / Rate Limit ✅ 2026-06-06
|
- [x] **中间件机制** — 注册表 + 链式执行,内置 CORS / Basic Auth / Rate Limit ✅ 2026-06-06
|
||||||
- [ ] 插件系统 — 动态加载 .so/.dll 扩展
|
- [x] **插件系统** — 动态加载 .so/.dll 扩展 ✅ 2026-06-06(MVP:dlopen + 中间件注册 + 示例插件)
|
||||||
|
|
||||||
## 当前状态
|
## 当前状态
|
||||||
|
|
||||||
- WebSocket 广播系统已上线:
|
- 所有 Phase 1-4 核心功能已完成
|
||||||
- `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`
|
|
||||||
- 编译通过,零警告(除 coco 子模块的 linker .note.GNU-stack 提示)
|
- 编译通过,零警告(除 coco 子模块的 linker .note.GNU-stack 提示)
|
||||||
- **66 项集成测试全部通过**(GET/HEAD/POST/404/Range/304/gzip/brotli/MIME/目录浏览/路径防护/文件上传/TLS/HTTP/2/h2c/WebSocket/访问日志/中间件)
|
- **139 个单元测试全部通过**(Unity 框架,新增 12 项 WebSocket 测试)
|
||||||
- **127 个单元测试全部通过**(Unity 框架)
|
- **68 项集成测试全部通过**
|
||||||
- 压测数据:wrk -t4 -c100 -d10s → 16,179 RPS,平均延迟 59.86μs(单线程)
|
- 压测数据:wrk -t4 -c100 -d10s → 16,179 RPS,平均延迟 59.86μs(单线程)
|
||||||
- 多线程模式(-t -w 4)已修复(主线程 accept + poll,client_handler 1MB 协程栈)
|
- 多线程模式(-t -w 4)已修复(主线程 accept + poll,client_handler 1MB 协程栈)
|
||||||
- POST 支持:JSON 和 form-urlencoded 回显,multipart 文件上传,Content-Length 解析,8MB 上限
|
- POST 支持:JSON 和 form-urlencoded 回显,multipart 文件上传,Content-Length 解析,8MB 上限
|
||||||
- **配置文件支持**:JSON 格式,13 个字段,命令行参数可覆盖
|
- 配置文件支持:JSON 格式,13 个字段,命令行参数可覆盖
|
||||||
- **访问日志**:Nginx combined 格式,支持文件路径或 stdout(`-`),线程安全(pthread_mutex),记录 User-Agent / Referer / 状态码
|
- 访问日志:Nginx combined 格式,支持文件路径或 stdout(`-`),线程安全(pthread_mutex),记录 User-Agent / Referer / 状态码
|
||||||
- **TLS/HTTPS**:OpenSSL 3.0 Memory BIO + coco 协程集成,自签名证书支持,ALPN 协商 h2/http1.1
|
- TLS/HTTPS:OpenSSL 3.0 Memory BIO + coco 协程集成,自签名证书支持,ALPN 协商 h2/http1.1
|
||||||
- **HTTP/2**:完整功能(静态文件服务、目录浏览、缓存协商、压缩、HEAD 请求)
|
- HTTP/2:完整功能(静态文件服务、目录浏览、缓存协商、压缩、HEAD 请求)
|
||||||
- **h2c**:明文 HTTP/2 支持(prior knowledge + Upgrade 协商)
|
- h2c:明文 HTTP/2 支持(prior knowledge + Upgrade 协商)
|
||||||
- **WebSocket**:RFC 6455 握手、文本/二进制帧 echo、ping/pong/close、**广播/频道**
|
- WebSocket:RFC 6455 握手、文本/二进制帧 echo、ping/pong/close、**广播/频道**
|
||||||
- **Windows 兼容性**:跨平台抽象层 platform.h + platform.c,CMakeLists.txt 自动检测平台,Makefile 在 Windows 下自动链接 ws2_32
|
- Windows 兼容性:跨平台抽象层 platform.h + platform.c,CMakeLists.txt 自动检测平台,Makefile 在 Windows 下自动链接 ws2_32
|
||||||
|
|
||||||
## 待办池
|
## 待办池
|
||||||
|
|
||||||
1. **[高] 插件系统** — ✅ 2026-06-06 已完成 MVP:dlopen 动态加载、中间件注册、示例插件
|
1. **[低] Doxygen 中文注释** — tls.c, config.c, multipart.c, access_log.c, main.c, websocket.c 等模块待补充
|
||||||
- 后续扩展:插件配置文件数组支持、插件热重载、插件间通信
|
2. **[低] 性能优化** — 连接池复用、零拷贝优化、压缩预缓存
|
||||||
2. **[中] HTTP/2 压缩** — ✅ 已实现(gzip/brotli 在 HTTP/2 响应中已生效)
|
3. **[低] 配置文件 JSON Schema 验证** — 配置文件格式校验
|
||||||
3. **[低] Doxygen 中文注释** — tls.c, config.c, multipart.c, access_log.c, main.c, websocket.c 等模块待补充
|
4. **[低] 插件热重载** — 运行时重新加载插件(SIGUSR1 触发)
|
||||||
4. **[低] 性能优化** — 连接池复用、零拷贝优化、压缩预缓存
|
5. **[低] 插件配置文件数组支持** — `plugins` 字段支持多插件数组
|
||||||
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
|
|
||||||
|
|
||||||
## 最近行动记录
|
## 最近行动记录
|
||||||
|
|
||||||
|
- 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)**
|
- 2026-06-06: **本轮行动 — 实现动态插件系统(Phase 4 MVP)**
|
||||||
- `plugin.h` / `plugin.c`:基于 dlopen/dlsym 的插件加载器,最多8个插件,逆序卸载
|
- `plugin.h` / `plugin.c`:基于 dlopen/dlsym 的插件加载器,最多8个插件,逆序卸载
|
||||||
- 插件接口:`cocoon_plugin_init()`(初始化)、`cocoon_plugin_shutdown()`(清理)、`cocoon_plugin_version()`(版本)
|
- 插件接口:`cocoon_plugin_init()`(初始化)、`cocoon_plugin_shutdown()`(清理)、`cocoon_plugin_version()`(版本)
|
||||||
@ -122,7 +97,7 @@
|
|||||||
- `cocoon.json`:示例配置添加 `"plugins": "plugins/hello.so"`
|
- `cocoon.json`:示例配置添加 `"plugins": "plugins/hello.so"`
|
||||||
- `.gitignore`:排除 `plugins/*.so` 和 `www/uploads/`
|
- `.gitignore`:排除 `plugins/*.so` 和 `www/uploads/`
|
||||||
- 集成测试:68项全部通过(新增插件加载+日志验证2项)
|
- 集成测试:68项全部通过(新增插件加载+日志验证2项)
|
||||||
- 单元测试:127个全部通过
|
- 单元测试:139个全部通过
|
||||||
- 编译零警告,推送到 main(952cc66)
|
- 编译零警告,推送到 main(952cc66)
|
||||||
- 2026-06-06: **本轮行动 — 中间件框架(CORS / Basic Auth / Rate Limit)**
|
- 2026-06-06: **本轮行动 — 中间件框架(CORS / Basic Auth / Rate Limit)**
|
||||||
- `middleware.c` / `middleware.h`:注册表(最多 16 个)+ 链式执行 + 短路机制
|
- `middleware.c` / `middleware.h`:注册表(最多 16 个)+ 链式执行 + 短路机制
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user