From 87bae245d2c34384c9e05ace70e5973edeeab253 Mon Sep 17 00:00:00 2001 From: xfy911 Date: Wed, 10 Jun 2026 11:36:59 +0800 Subject: [PATCH] =?UTF-8?q?build(phase4):=20=E6=9B=B4=E6=96=B0=E6=9E=84?= =?UTF-8?q?=E5=BB=BA=E7=B3=BB=E7=BB=9F=E4=B8=8E=E6=96=87=E6=A1=A3=EF=BC=8C?= =?UTF-8?q?=E9=9B=86=E6=88=90=20Phase=204=20=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - CMakeLists.txt: 新增 middleware_ext.c、load_balance.c、grpc.c、 http3.c 到源文件列表和单元测试列表 - Makefile: 更新 SRCS,新增 4 个模块的单元测试编译规则 - README.md: 新增 Phase 4 特性(JWT Auth、负载均衡、gRPC、HTTP/3)、 模块说明表、路线图标记全部完成、测试统计(451 单元测试) - .cocoon-plan.md: Phase 4 全部标记为完成,更新当前状态与行动记录 --- .cocoon-plan.md | 30 ++++++++++++++++++++---------- CMakeLists.txt | 6 +++++- Makefile | 18 +++++++++++++++++- README.md | 20 ++++++++++++++++++++ 4 files changed, 62 insertions(+), 12 deletions(-) diff --git a/.cocoon-plan.md b/.cocoon-plan.md index 7b84774..0c1d9b1 100644 --- a/.cocoon-plan.md +++ b/.cocoon-plan.md @@ -38,27 +38,37 @@ - [x] Prometheus 指标 - [x] SIGHUP 配置热重载 -### Phase 4 — 生态(未来方向) -- [ ] HTTP/3 (QUIC) -- [ ] 分布式负载均衡 -- [ ] gRPC 支持 -- [ ] 更多内置中间件 +### Phase 4 — 生态(已完成 ✅) +- [x] HTTP/3 (QUIC) — QUIC 传输层 + HTTP/3 帧处理 + QPACK 静态表 + TLS 1.3 接口 +- [x] 分布式负载均衡 — 一致性哈希 + 最少连接 + 加权响应时间(EWMA) + 随机 +- [x] gRPC 支持 — gRPC over HTTP/2 + protobuf LEB128 帧 + 四种 RPC 模式 + gRPC-Web 兼容 +- [x] 更多内置中间件 — JWT Auth(HS256) + Security Headers + Request ID + IP 过滤 ## 当前状态 - **编译状态**:零警告,全部通过 -- **单元测试**:190 个全部通过 ✓(21 + 17 + 35 + 10 + 12 + 31 + 17 + 35 + 12) +- **单元测试**:451 个全部通过 ✓(原有 190 + 新增 261:53 middleware_ext + 56 load_balance + 88 grpc + 64 http3) - **集成测试**:109 项全部通过 ✓ -- **代码覆盖率**:核心模块覆盖完整 -- **文档状态**:README 完整,API 文档齐全 -- **项目阶段**:维护模式(所有计划功能已完成) +- **代码覆盖率**:核心模块覆盖完整,Phase 4 模块覆盖良好 +- **文档状态**:README 完整,API 文档齐全,.cocoon-plan.md 已更新 +- **项目阶段**:所有计划功能已完成(Phase 1~4 全部 ✅) +- **新增代码**:12 个新文件,约 8520 行源代码 + 测试 ## 待办池(已完成清空) -所有计划内功能已完成。项目进入维护阶段。 +所有计划内功能已完成。项目全部路线图功能已交付。 ## 最近行动记录 +- 2026-06-10 11:30: **Phase 4 生态扩展 — 全部完成 ✅** + - 扩展中间件:新增 middleware_ext.c/h — JWT Auth(HS256)、Security Headers(HSTS/CSP/X-Frame-Options)、Request ID(32字符hex追踪)、IP 过滤(黑名单/白名单/CIDR) + - 分布式负载均衡:新增 load_balance.c/h — 一致性哈希(MurmurHash3+512虚拟节点)、最少连接、加权响应时间(EWMA)、随机算法 + - gRPC 支持:新增 grpc.c/h — gRPC over HTTP/2、LEB128 消息帧编解码、四种 RPC 模式(Unary/Server/Client/Bidirectional)、gRPC-Web 兼容、17个状态码完整支持 + - HTTP/3 (QUIC):新增 http3.c/h — QUIC 传输层(UDP+连接管理)、HTTP/3 帧处理(DATA/HEADERS/SETTINGS/GOAWAY)、QPACK 静态表编解码(RFC 9204)、TLS 1.3 集成接口 + - 新增 261 个单元测试(累计 451 个),全部通过 + - 更新构建系统:CMakeLists.txt + Makefile 已同步 + - 项目全部路线图功能已交付 + - 2026-06-10 09:00: **状态验证与维护检查** - 编译检查:零警告,全部通过 - 单元测试:190 个全部通过 ✓ diff --git a/CMakeLists.txt b/CMakeLists.txt index 7e8f402..85302da 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -33,6 +33,10 @@ set(COCOON_SOURCES access_log.c websocket.c middleware.c + middleware_ext.c + load_balance.c + grpc.c + http3.c ) # 头文件路径 @@ -139,7 +143,7 @@ if(BASH_EXECUTABLE) endif() # 单元测试(Unity 框架) -set(UNIT_TESTS test_server test_http test_static test_log test_config test_multipart) +set(UNIT_TESTS test_server test_http test_static test_log test_config test_multipart test_middleware_ext test_load_balance test_grpc test_http3) foreach(test_name ${UNIT_TESTS}) set(test_src "${CMAKE_CURRENT_SOURCE_DIR}/tests/unit/${test_name}.c") diff --git a/Makefile b/Makefile index 26d0c84..c5402fd 100644 --- a/Makefile +++ b/Makefile @@ -20,7 +20,7 @@ PREFIX ?= /usr/local BINDIR = $(PREFIX)/bin # 源文件 -SRCS = main.c server.c http.c static.c log.c config.c multipart.c tls.c http2.c access_log.c websocket.c platform.c middleware.c plugin.c proxy.c proxy_tls.c healthcheck.c +SRCS = main.c server.c http.c static.c log.c config.c multipart.c tls.c http2.c access_log.c websocket.c platform.c middleware.c plugin.c proxy.c proxy_tls.c healthcheck.c middleware_ext.c load_balance.c grpc.c http3.c OBJS = $(SRCS:.c=.o) TARGET = cocoon @@ -118,6 +118,22 @@ $(UNIT_TEST_DIR)/test_config: $(UNIT_TEST_DIR)/test_config.c config.c log.c acce $(UNIT_TEST_DIR)/test_proxy: $(UNIT_TEST_DIR)/test_proxy.c proxy_tls.c http.c log.c platform.c $(UNITY_SRC) $(CC) $(CFLAGS) -I. -I$(UNIT_TEST_DIR)/../unity -o $@ $(UNIT_TEST_DIR)/test_proxy.c proxy_tls.c http.c log.c platform.c $(UNITY_SRC) $(LDFLAGS) +# 扩展中间件测试 +$(UNIT_TEST_DIR)/test_middleware_ext: $(UNIT_TEST_DIR)/test_middleware_ext.c middleware_ext.c http.c log.c platform.c $(UNITY_SRC) + $(CC) $(CFLAGS) -I. -I$(UNIT_TEST_DIR)/../unity -o $@ $(UNIT_TEST_DIR)/test_middleware_ext.c middleware_ext.c http.c log.c platform.c $(UNITY_SRC) $(LDFLAGS) + +# gRPC 测试 +$(UNIT_TEST_DIR)/test_grpc: $(UNIT_TEST_DIR)/test_grpc.c grpc.c http.c log.c platform.c $(UNITY_SRC) + $(CC) $(CFLAGS) -I. -I$(UNIT_TEST_DIR)/../unity -o $@ $(UNIT_TEST_DIR)/test_grpc.c grpc.c http.c log.c platform.c $(UNITY_SRC) -lm + +# 负载均衡测试 +$(UNIT_TEST_DIR)/test_load_balance: $(UNIT_TEST_DIR)/test_load_balance.c load_balance.c proxy.c proxy_tls.c http.c log.c platform.c $(UNITY_SRC) + $(CC) $(CFLAGS) -I. -I$(UNIT_TEST_DIR)/../unity -o $@ $(UNIT_TEST_DIR)/test_load_balance.c load_balance.c proxy.c proxy_tls.c http.c log.c platform.c $(UNITY_SRC) $(LDFLAGS) + +# HTTP/3 测试 +$(UNIT_TEST_DIR)/test_http3: $(UNIT_TEST_DIR)/test_http3.c http3.c http.c log.c platform.c tls.c $(UNITY_SRC) + $(CC) $(CFLAGS) -I. -I$(UNIT_TEST_DIR)/../unity -o $@ $(UNIT_TEST_DIR)/test_http3.c http3.c http.c log.c platform.c tls.c $(UNITY_SRC) $(LDFLAGS) + # 安装 install: $(TARGET) install -d $(BINDIR) diff --git a/README.md b/README.md index 6ce37a8..7adcf81 100644 --- a/README.md +++ b/README.md @@ -32,6 +32,13 @@ | 🏥 健康检查 | `/_health` 端点返回 JSON 服务器状态 | | 🔄 反向代理 | HTTP/1.1 + HTTPS 后端转发,路径前缀匹配,X-Forwarded-* 头透传 | | 🪟 跨平台 | Linux / macOS / Windows(MinGW/MSVC)| +| 🔐 JWT 认证 | HS256 签名验证,Bearer Token 解析,exp 过期检查 | +| 🛡️ Security Headers | HSTS / X-Frame-Options / CSP / X-XSS-Protection / Referrer-Policy | +| 🆔 Request ID | 32 字符 hex 追踪 ID 生成与透传 | +| 🚫 IP 过滤 | IPv4 / CIDR 黑名单与白名单模式,X-Forwarded-For 解析 | +| ⚖️ 负载均衡 | 一致性哈希(MurmurHash3)、最少连接、加权响应时间(EWMA)、随机 | +| 📡 gRPC | gRPC over HTTP/2,四种 RPC 模式(Unary/Streaming),gRPC-Web 兼容 | +| 🌐 HTTP/3 | QUIC 传输层,HTTP/3 帧处理,QPACK 头部压缩,TLS 1.3 集成 | ## Quick Start @@ -218,6 +225,10 @@ Options: | `platform.c` | 跨平台抽象(Linux/macOS/Windows) | | `proxy.c` / `proxy_tls.c` | 反向代理(HTTP/1.1 + HTTPS 后端转发) | | `cocoon.h` | 公共配置结构体与错误码定义 | +| `middleware_ext.c/h` | 扩展内置中间件:JWT Auth / Security Headers / Request ID / IP 过滤 | +| `load_balance.c/h` | 分布式负载均衡:一致性哈希 / 最少连接 / 加权响应时间 / 随机 | +| `grpc.c/h` | gRPC over HTTP/2:消息帧编解码 / 四种 RPC 模式 / gRPC-Web 兼容 | +| `http3.c/h` | HTTP/3 over QUIC:QUIC 传输 / 帧处理 / QPACK 压缩 / TLS 1.3 接口 | ## 核心 API 速览 @@ -265,6 +276,8 @@ static_send_error(fd, 404, true); | 平均延迟 | ~60μs | wrk, 100 连接, 4 线程 | | 最大并发 | 数万连接 | 单线程模式 | | 多线程扩展 | 线性至核数 | M:N 调度 + Work-stealing | +| 单元测试 | 451 项全部通过 ✓ | Unity 框架 | +| 集成测试 | 109 项全部通过 ✓ | curl + bash | > 压测环境:AMD EPYC / 4 核 / Ubuntu 22.04 / io_uring 后端 @@ -298,6 +311,13 @@ make bench - [x] 跨平台支持(Windows) - [x] 反向代理支持 - [x] 虚拟主机 / 多站点 +- [x] JWT 认证中间件(HS256) +- [x] Security Headers 中间件(HSTS / CSP / X-Frame-Options) +- [x] Request ID 追踪中间件 +- [x] IP 黑白名单过滤中间件(CIDR 支持) +- [x] 分布式负载均衡(一致性哈希 / 最少连接 / EWMA / 随机) +- [x] gRPC 支持(Unary / Server / Client / Bidirectional Streaming) +- [x] HTTP/3 over QUIC(QPACK / TLS 1.3) ## 构建与安装