cocoon/.cocoon-plan.md

15 KiB
Raw Blame History

Cocoon 发展规划(自主维护)

此文件由 cron 任务每3小时更新记录项目状态与下一步计划。

路线图

Phase 1 — 核心稳定(当前)

  • HTTP/1.1 请求解析
  • 响应头格式化
  • 静态文件服务sendfile
  • 目录浏览
  • Range 请求
  • MIME 类型识别
  • 多线程 M:N 调度
  • 命令行参数
  • 优雅关闭

Phase 2 — 健壮性

  • HTTP 缓存ETag / Last-Modified / If-None-Match 2026-06-03
  • 连接超时管理(空闲连接自动清理) 2026-06-03
  • 最大并发连接数限制 2026-06-03
  • 分级日志系统error / warn / info / debug 2026-06-03
  • 访问日志Nginx combined 格式,含 User-Agent / Referer 2026-06-05
  • Gzip 压缩 2026-06-03已接入响应流程
  • Brotli 压缩 2026-06-04优先于 Gzip
  • 集成测试 suite68 项 curl/bash 测试全部通过) 2026-06-06
  • 性能基准wrk: ~16.2K RPS / ~60μs 延迟) 2026-06-03
  • 请求体解析POST 支持) 2026-06-03
    • Content-Length 读取
    • JSON / form-urlencoded 回显
    • multipart/form-data 文件上传(保存到 root_dir/uploads/ 2026-06-04
  • C 语言单元测试框架 2026-06-03Unity 框架142 个测试全部通过)
  • WebSocket 单元测试 2026-06-0612 项,覆盖帧解析/编码/握手/粘包/大负载)
  • 健康检查端点 /_health 2026-06-06JSON 状态:连接数、插件、中间件、运行时间)

Phase 3 — 扩展(已完成)

  • 配置文件支持 — JSON 配置替代纯命令行 2026-06-04
    • config.c / config.h:极简 JSON 解析器(数字、字符串、布尔、注释)
    • cocoon_config_t 结构体root_dir / port / threaded / num_workers / max_connections / timeout_ms / log_level / gzip_enabled / brotli_enabled / access_log / cors_enabled / auth_user / auth_pass / rate_limit
    • config_merge():命令行参数覆盖配置文件
    • cocoon.json 示例配置
    • --no-gzip / --no-brotli 命令行选项禁用压缩
  • Brotli 压缩 — 比 gzip 更高压缩率,现代浏览器均支持 2026-06-04
  • HTTPS / TLS — OpenSSL Memory BIO 集成,支持命令行与配置文件启用 2026-06-04
  • HTTP/2 — nghttp2 完整实现TLS ALPN 协商 + 静态文件服务 + 缓存 + 目录浏览) 2026-06-04
  • h2c 升级支持 — 明文 HTTP/2PRI 魔术字直接连接 + Upgrade: h2c 协商) 2026-06-04
  • HTTP/2 目录浏览 — 目录无 index.html 时返回目录列表 2026-06-04
  • WebSocket 支持 — RFC 6455 握手 + 帧解析/编码 + echo 服务器 2026-06-05
  • Windows 兼容性 — 跨平台抽象层,支持 Linux/macOS/Windows(MinGW/MSVC) 2026-06-04

Phase 4 — 生态

  • WebSocket 广播/频道路由 — 全局连接注册表 + 广播/定向发送 API 2026-06-05
  • 中间件机制 — 注册表 + 链式执行,内置 CORS / Basic Auth / Rate Limit 2026-06-06
  • 插件系统 — 动态加载 .so/.dll 扩展 2026-06-06MVPdlopen + 中间件注册 + 示例插件)

当前状态

  • 所有 Phase 1-4 核心功能已完成
  • 编译通过,零警告(除 coco 子模块的 linker .note.GNU-stack 提示)
  • 142 个单元测试全部通过Unity 框架,新增 12 项 WebSocket 测试)
  • 75 项集成测试全部通过(新增 7 项健康检查端点测试)
  • 压测数据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/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. [低] Doxygen 中文注释 — 各模块函数级注释待完善
  2. [低] 性能优化 — 连接池复用、零拷贝优化、压缩预缓存
  3. [低] 配置文件 JSON Schema 验证 — 配置文件格式校验
  4. [x] 插件热重载 — 运行时 SIGUSR1 触发重新加载插件 2026-06-06
  5. [x] CI 自动化 — GitHub Actions 编译 + 测试 2026-06-06
  6. [x] Makefile 测试目标完善 — integration-test 别名 + test-all 2026-06-06
  7. [x] README 同步更新 — 补充所有新功能与 CI badge 2026-06-06

最近行动记录

  • 2026-06-07: 本轮行动 — HTTP/2 POST 请求体支持
    • on_data_chunk_recv_callback: 实现请求体收集,将 DATA 帧数据追加到 stream->request.body
    • on_frame_recv_callback: 根据请求方法选择处理方式GET/HEAD → http2_serve_staticPOST → http2_serve_post
    • http2_serve_post: 新增函数,处理 HTTP/2 POST 请求
      • 支持 multipart/form-data 文件上传(保存到 root_dir/uploads/
      • 支持 application/json 和 x-www-form-urlencoded 回显
      • 构建 JSON 响应并通过 nghttp2 发送
    • 包含 multipart.hplatform.hhttp2.c
    • 全部 142 个单元测试 + 77 项集成测试通过,编译零警告
    • 推送到 main
  • 2026-06-06: 本轮行动 — WebSocket 空闲超时 + 跨平台 poll/select 抽象
    • platform.h / platform.c: 新增 cocoon_socket_poll_readable() 跨平台 socket 可读等待
      • POSIX: poll() + POLLIN
      • Windows: select() + fd_setreadfds
    • websocket.c: ws_handle_connection() 实现 timeout_ms 空闲超时处理
      • 每次循环前调用 cocoon_socket_poll_readable() 等待数据或超时
      • 超时时发送 1001 Idle timeout 关闭帧,清理连接资源
      • 解决 TODO: /* TODO: 超时处理 */
    • tests/websocket_test.py: 新增 test_timeout() 测试Python 标准库,零依赖)
      • 连接后不发帧,验证服务端 2 秒后发送 1001 关闭帧
    • tests/integration_test.sh: 新增 WebSocket 空闲超时集成测试(启动 -o 2000 短超时服务器)
    • Makefile: 补全 test_websocket 单元测试编译规则,加入 platform.c(修复 undefined reference
    • 全部 142 个单元测试 + 77 项集成测试通过,编译零警告
    • 推送到 main待提交
  • 2026-06-06: 本轮行动 — 基础设施完善Makefile + CI + README
    • Makefile: 添加 integration-test 别名和 test-all 目标(一键运行全部测试)
    • .github/workflows/ci.yml: GitHub Actions 工作流push/PR 时自动编译 + 单元测试 + 集成测试
    • README.md: 同步项目现状,添加 CI badge、补充全部新特性与模块说明
    • 编译零警告142 个单元测试 + 77 项集成测试全部通过
    • 推送到 main87f89f5 → b0ae0f7 → 068ab7d
  • 2026-06-06: 本轮行动 — 插件热重载支持SIGUSR1
    • plugin.c / plugin.h: 新增 cocoon_plugin_reload() API自动存储已加载插件路径
    • 热重载流程:卸载所有插件 → 按存储路径重新加载 → 日志输出成功/失败数量
    • main.c: 注册 SIGUSR1 信号处理器,收到信号后触发 cocoon_plugin_reload()
    • --help 新增 Signals 说明文档
    • 集成测试:新增 2 项热重载测试SIGUSR1 后 HTTP 200 验证 + 热重载日志验证)
    • 全部 142 个单元测试 + 77 项集成测试通过,编译零警告
    • 推送到 main80385d9
  • 2026-06-06: 本轮行动 — 健康检查端点 /_health
    • server.c:新增 /_health 路由,返回 JSON 服务器状态
    • 包含uptime_seconds、connections.active/max、plugins.count/list、middleware.count/names
    • middleware.c / middleware.h:新增 cocoon_middleware_list() 查询 API
    • 集成测试:新增 7 项测试(状态码 200、JSON 字段验证、HEAD 支持、路径遍历防护)
    • 全部 142 个单元测试 + 75 项集成测试通过,编译零警告
    • 推送到 main09e592d
  • 2026-06-06: 本轮行动 — 插件配置数组支持 + 杂项修复
    • config.c:极简 JSON 解析器新增 [/] token 类型,支持字符串数组解析
    • plugins 字段向后兼容单字符串 "plugins.so",向前支持数组 ["a.so", "b.so"]
    • .gitignore:补全遗漏的 tests/unit/test_websocket 二进制
    • Makefile:补全 test_log 单元测试编译规则(缺失导致 make unit-test 失败)
    • cocoon.json:示例配置改为数组格式 "plugins": ["plugins/hello.so"]
    • test_config.c:新增 3 项测试(test_load_plugins_stringtest_load_plugins_arraytest_load_plugins_array_multiple
    • 全部 142 个单元测试 + 68 项集成测试通过,编译零警告
    • 推送到 main2dc29d0
  • 2026-06-06: 本轮行动 — 添加 WebSocket 单元测试
    • 新增 tests/unit/test_websocket.c12 项 WebSocket 协议单元测试
    • 覆盖:帧解析(文本/二进制/关闭/空负载、掩码解掩码、16位/64位长度、帧编码文本/关闭/ping/pong、握手验证Sec-WebSocket-Accept、粘包多帧解析、64KB 大负载、空负载边界
    • 使用 socketpair 创建内部通信管道,无需真实网络依赖
    • 全部 12 项测试通过139 个单元测试 + 68 项集成测试全部通过
    • 推送到 mainfaedbd5
  • 2026-06-06: 本轮行动 — 实现动态插件系统Phase 4 MVP
    • 新增 tests/unit/test_websocket.c12 项 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()(版本)
    • 插件通过 cocoon_middleware_register() 注册中间件参与请求处理
    • 命令行:--plugin <path> 可多次指定
    • 配置文件:plugins 字段支持字符串路径(单插件,数组支持待扩展)
    • server.c:在 server_create() 中加载插件,server_destroy() 中逆序卸载
    • plugins/hello.c:示例插件,演示中间件注册/注销/版本返回
    • Makefile:添加 plugin.c-ldl 链接选项
    • cocoon.json:示例配置添加 "plugins": "plugins/hello.so"
    • .gitignore:排除 plugins/*.sowww/uploads/
    • 集成测试68项全部通过新增插件加载+日志验证2项
    • 单元测试139个全部通过
    • 编译零警告,推送到 main952cc66
  • 2026-06-06: 本轮行动 — 中间件框架CORS / Basic Auth / Rate Limit
    • middleware.c / middleware.h:注册表(最多 16 个)+ 链式执行 + 短路机制
    • CORS 中间件OPTIONS 预检 204 + 跨域响应头Access-Control-Allow-Origin/Methods/Headers
    • Basic Auth 中间件HTTP 基础认证Base64 解码401 Unauthorized + WWW-Authenticate 头
    • Rate Limit 中间件:基于 IP 秒级限流哈希表256 桶429 Too Many Requests
    • config.c / config.h:新增 cors_enabled / auth_user / auth_pass / rate_limit 字段
    • main.c:新增 --cors / --auth-user / --auth-pass / --rate-limit CLI 选项;修复 access_log_path 未初始化段错误
    • server.c:集成 cocoon_middleware_init_builtin()server_create() 中初始化;修复 server_destroymain() 双重释放字符串指针;新增 mw_config 字段避免栈变量悬空
    • 修复 rate_limit_hash:仅使用 IP 地址计算哈希,排除端口,避免同一 IP 不同 bucket
    • 修复 401/429 响应 Content-Length与 body 长度严格匹配,避免 curl 挂起等待
    • 集成测试66 项全部通过(新增 CORS/Basic Auth/Rate Limit 5 项测试)
    • 单元测试127 个全部通过(修复 test_config.cconfig_merge 参数不匹配)
    • 编译零警告,推送到 maindd41464
  • 2026-06-05: 本轮行动 — WebSocket 广播/频道路由系统
    • websocket.c:新增全局连接注册表(链表 + pthread_mutex + 原子计数)
    • ws_registry_add/remove: 连接自动注册/注销
    • ws_broadcast(): 向所有活跃连接广播文本消息
    • ws_broadcast_to_path(): 按握手路径(如 /ws/chat)定向广播
    • ws_connection_count(): 获取当前连接数
    • ws_handle_connection() 新增 path 参数,用于频道标识
    • server.c:修改调用处,传入 req.path 作为频道
    • websocket.h:新增广播 API 声明
    • 编译零警告61 项集成测试 + 127 个单元测试全部通过
    • 提交:fix(coco) 修正子模块 + feat(websocket) 广播系统
  • 2026-06-05: 本轮行动 — 实现 WebSocket 支持RFC 6455
    • 新增 websocket.h / websocket.cWebSocket 协议完整实现
    • 帧解析:支持 FIN、opcode、payload length7/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.pyPython 标准库,零依赖)
    • 编译通过,零警告
    • 61 项集成测试全部通过127 个单元测试全部通过
    • 推送到 main2775033
  • 2026-06-05: 本轮行动 — 访问日志Nginx combined 格式)
    • 新增 access_log.c / access_log.hNginx combined 格式访问日志线程安全pthread_mutex
    • cocoon.h:新增 access_log_path 配置字段
    • config.c / config.hJSON 配置和命令行参数支持 access_log
    • main.c:新增 --access-log <path> CLI 选项,- 表示输出到 stdout
    • server.c:扩展 connection_t 结构体,添加 client_addr / addr_len / response_status
    • server.chandle_request() 中每个响应路径设置 response_status,请求结束时调用 access_log_write()
    • server.caccept_loop() 将客户端地址复制到连接上下文
    • Makefile:加入 access_log.c,更新单元测试编译规则
    • cocoon.json:示例配置添加 "access_log": "-"
    • tests/integration_test.sh:新增 5 项访问日志测试
    • 编译通过,零警告
    • 59 项集成测试全部通过127 个单元测试全部通过
    • 推送到 main
  • 2026-06-04: 其他历史记录...(省略)