xfy911
|
fb35fef0db
|
feat: SSE 端点支持
- 新增 sse.h/sse.c 实现 Server-Sent Events
- 可复用 API: sse_send_headers, sse_send_event, sse_send_comment
- 内置 /_sse 演示端点,每秒推送时间戳事件
- 支持 Last-Event-ID 断线重连
- 每 15 秒心跳注释保活
- 非 GET 方法返回 405
- 集成到 server.c 请求处理流程
- 新增 7 项 SSE 单元测试 + 5 项集成测试
- 编译零警告,全部 458 单元测试 + 114 集成测试通过 ✓
|
2026-06-12 13:39:49 +08:00 |
|
xfy911
|
0f1323dccb
|
维护记录:定期巡检验证,全部测试通过
|
2026-06-12 12:21:07 +08:00 |
|
xfy911
|
b255c3f5da
|
维护:移除误跟踪的编译产物 test_http_asan
- git rm --cached tests/unit/test_http_asan
- 该文件为带 AddressSanitizer 的单元测试 ELF 可执行文件
- 已在 .gitignore 中正确忽略(tests/unit/test_* 模式覆盖)
- 更新 .cocoon-plan.md 维护记录
|
2026-06-12 09:23:59 +08:00 |
|
xfy911
|
132f219803
|
维护记录:定期巡检验证,全部测试通过
|
2026-06-12 06:19:12 +08:00 |
|
xfy911
|
65bc686f39
|
维护记录:定期巡检验证,全部测试通过
|
2026-06-12 03:19:42 +08:00 |
|
xfy911
|
397554d0c9
|
docs: 更新维护记录,2026-06-12 移除误跟踪编译产物
|
2026-06-12 00:19:18 +08:00 |
|
xfy911
|
a3f53fc596
|
chore: 从 git 跟踪中移除编译产物 tests/unit/test_healthcheck 二进制文件
该文件已在 .gitignore 中列出,但此前被误跟踪在仓库中。执行 git rm --cached 以正确忽略构建产物,保持仓库仅包含源代码。
|
2026-06-12 00:19:01 +08:00 |
|
xfy911
|
460832019d
|
docs: 更新维护状态记录,2026-06-11 21:18 定期巡检验证全部测试通过
- 编译零警告(含额外严格标志 -Wshadow -Wstrict-prototypes -Wmissing-prototypes)
- 451 个单元测试 + 109 项集成测试全部通过
- 无遗留 TODO/FIXME
- 工作区干净,维护模式正常
|
2026-06-11 21:22:25 +08:00 |
|
xfy911
|
d06ac54782
|
docs: 更新维护状态记录,2026-06-11 验证全部测试通过
|
2026-06-11 18:19:15 +08:00 |
|
xfy911
|
9544206d0c
|
docs: 清理 middleware_ext.c 中遗留的 TODO 注释,改为准确机制说明
|
2026-06-11 15:21:34 +08:00 |
|
xfy911
|
2568ca6508
|
chore: 更新 .gitignore,忽略 Phase 4 单元测试二进制
新增 test_grpc / test_http3 / test_load_balance / test_middleware_ext。
|
2026-06-10 13:46:36 +08:00 |
|
xfy911
|
602132d404
|
fix(build): 重新添加 coco 为 git submodule
使用 https://github.com/xfy911/coco.git 作为子模块,
替代之前不完整且不兼容的内联头文件。
|
2026-06-10 13:40:46 +08:00 |
|
xfy911
|
7a5c2c69c3
|
fix(build): 删除内联 coco.h,为恢复子模块做准备
内联的 53 行 coco.h 缺少 .context/.priority/.p_id 字段,
与 server.c 和 coco/src/core/coro_go.c 不兼容,导致编译失败。
|
2026-06-10 13:40:31 +08:00 |
|
xfy911
|
87bae245d2
|
build(phase4): 更新构建系统与文档,集成 Phase 4 模块
- 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 全部标记为完成,更新当前状态与行动记录
|
2026-06-10 11:36:59 +08:00 |
|
xfy911
|
bf9787e6e9
|
feat(phase4): 实现 Phase 4 全部生态扩展模块
新增 4 个核心模块,12 个新文件,约 8832 行源代码 + 测试:
1. 扩展内置中间件 (middleware_ext.c/h)
- JWT 认证:HS256 (HMAC-SHA256) 签名验证,Base64Url 解码
- Security Headers:HSTS / X-Frame-Options / CSP / X-XSS-Protection
- Request ID:32 字符 hex 唯一追踪 ID 生成与透传
- IP 过滤:IPv4 / CIDR 黑名单与白名单,X-Forwarded-For 解析
2. 分布式负载均衡 (load_balance.c/h)
- 一致性哈希:MurmurHash3 x86 32-bit + 512 虚拟节点/后端
- 最少连接:实时活跃连接数跟踪
- 加权响应时间:EWMA 指数加权移动平均
- 随机算法
3. gRPC 支持 (grpc.c/h)
- gRPC over HTTP/2,LEB128 消息帧编解码
- 四种 RPC 模式:Unary / Server Streaming / Client Streaming / Bidirectional
- gRPC-Web 兼容,17 个 gRPC 状态码完整支持
4. HTTP/3 (QUIC) (http3.c/h)
- QUIC 传输层:UDP socket 管理,64-bit 连接 ID
- HTTP/3 帧处理:HEADERS / DATA / SETTINGS / GOAWAY
- QPACK 静态表编解码 (RFC 9204)
- TLS 1.3 集成接口
新增单元测试:
- test_middleware_ext.c: 53 项测试
- test_load_balance.c: 56 项测试
- test_grpc.c: 88 项测试
- test_http3.c: 64 项测试
- 新增合计:261 项,累计 451 项
同时替换 coco 子模块为内联 stub 头文件,
确保无需外部依赖即可编译。
|
2026-06-10 11:36:45 +08:00 |
|
xfy911
|
525cd8954c
|
docs(plan): 更新维护状态记录
|
2026-06-10 09:05:00 +08:00 |
|
xfy911
|
43d5f6d54e
|
docs(readme): 标记虚拟主机为完成,更新发展规划
- README 路线图:虚拟主机 / 多站点标记为 ✅ 完成
- .cocoon-plan.md:重构为完整历史记录,包含所有功能完成时间线
- 项目进入维护阶段,所有 Phase 1-3 功能已完成
|
2026-06-10 06:03:49 +08:00 |
|
xfy911
|
528291c7e5
|
feat(server): SIGHUP 配置热重载
- server.h/server.c: 新增 server_request_reload() 和 server_reload_config()
- server_create() 新增 config_file_path 参数
- 热重载范围: root_dir, log_level, access_log, gzip/brotli, timeout, max_connections, vhosts, proxies, healthcheck
- 保守策略: 不释放旧字符串指针,避免活跃连接竞态
- accept_loop() 在 accept() 后也检查 reload_requested,确保新连接使用最新配置
- main.c: 新增 sighup_handler() 注册 SIGHUP 信号
- tests/integration_test.sh: 新增 SIGHUP 热重载集成测试 (3项)
- 190 单元测试 + 109 集成测试全部通过,编译零警告
|
2026-06-10 03:41:10 +08:00 |
|
xfy911
|
e6b4a11d16
|
feat(http2): HTTP/2 代理流式转发
- 新增 proxy_data_source_read_callback:实时从后端读取数据流式转发
- http2_serve_proxy 重构:解析响应头后立即发送,body 通过 DATA 帧实时转发
- 解除 64KB 响应缓冲区限制,支持任意大小响应体
- 流结构新增代理字段(backend_fd/tls_conn/eof/close_backend/backend)
- 已缓存 body(recv_headers 预读部分)优先发送,再续读后端
- 连接池归还/关闭自动处理
|
2026-06-10 00:22:46 +08:00 |
|
xfy911
|
2280b318a8
|
docs(plan): 更新计划,标记 proxy 单元测试完成(31项,190个单元测试全部通过)
|
2026-06-09 21:11:53 +08:00 |
|
xfy911
|
5d4c78c8cb
|
test(proxy): 新增反向代理模块单元测试(31项)
覆盖:
- proxy_init: 配置初始化清零
- proxy_add_rule: 添加规则、追加后端、参数校验(空值/空字符串)
- proxy_match: 精确匹配、前缀匹配、多规则、NULL参数
- select_backend_sww: 平滑加权轮询(单后端、等权重、不等权重3:1、跳过不健康、全不健康)
- select_backend_sww_all: fallback包含不健康后端
- parse_backend_url: http/https/无scheme/无端口/带路径
- proxy_build_forwarded_path: 无目标路径/有目标路径/空剩余路径
- proxy_update_health: 成功阈值恢复、失败阈值标记、计数器重置
- proxy_pool_init: 默认大小、超上限裁剪、零值回退
编译零警告,190个单元测试 + 106项集成测试全部通过。
|
2026-06-09 21:10:49 +08:00 |
|
xfy911
|
0e7de9400c
|
test(healthcheck): 新增主动健康检查单元测试(17项)
- 覆盖 healthcheck_parse_status 状态码解析(正常/异常/边界)
- 覆盖 healthcheck_build_request 请求构建(默认路径/自定义路径/空路径)
- 覆盖 healthcheck_update_state 状态机(阈值恢复/阈值失败/计数器重置/时间戳)
- 覆盖 healthcheck_probe_once NULL 防护
- 使用 #include healthcheck.c 白盒测试技巧访问静态函数
- Makefile: 新增 test_healthcheck 编译规则
- .cocoon-plan.md: 标记主动健康检查完成,更新单元测试总数 159
编译零警告,159 个单元测试 + 106 项集成测试全部通过。
|
2026-06-09 18:16:35 +08:00 |
|
xfy911
|
60ef9ed908
|
feat(vhost): 虚拟主机/多站点支持
- cocoon.h: 新增 cocoon_vhost_t 结构体和 COCOON_MAX_VHOSTS 宏
- config.c: JSON 解析器新增 vhosts 数组解析
- server.c: HTTP/1.1 请求根据 Host 头匹配虚拟主机 root_dir
- http2.h/c: HTTP/2 根据 :authority 匹配虚拟主机,存储为 Host 头
- http2.c: 新增 http2_session_set_server_config() API
- cocoon.json: 添加 vhosts 配置示例
- tests: 新增 3 项虚拟主机集成测试
- 编译零警告,142 单元测试 + 106 集成测试全部通过
|
2026-06-09 15:28:57 +08:00 |
|
xfy911
|
ca620c17f2
|
feat(healthcheck): 新增主动健康检查模块
- 新增 healthcheck.c / healthcheck.h 模块
- 每个后端支持独立配置探测路径(默认 /health)、间隔(默认 5s)、超时(默认 2s)
- 使用线程 + sleep 实现周期性探测
- 探测成功/失败更新后端 healthy 状态,与现有被动检测共用状态字段
- 配置 JSON 新增 healthcheck 字段(path, interval_ms, timeout_ms, enabled)
- 优雅启动/关闭:server_create 启动探测线程,server_destroy 停止并 join
- 编译零警告
- 142 单元测试 + 103 集成测试全部通过(新增 4 项健康检查测试)
|
2026-06-09 14:11:52 +08:00 |
|
xfy911
|
8516261d34
|
docs(plan): 更新计划,标记连接池 HTTP/1.0 兼容完成
- 待办池:连接池 HTTP/1.0 兼容 → ✅
- 测试数:93 → 99 项
- 添加 2026-06-09 12:00 行动记录
|
2026-06-09 12:36:58 +08:00 |
|
xfy911
|
90601e0f67
|
fix(proxy): 修复连接池 HTTP/1.0 兼容与配置合并 bug
- proxy.c: 当后端发送 Connection: close 或关闭连接时,不再归还已关闭连接
到池中。避免复用已关闭连接导致请求失败。
- http2.c: HTTP/2 代理检测到 HTTP/1.0 响应时默认关闭连接,不再错误归还。
- main.c: 修复 -c 配置文件与 --cert/--key 同时使用时 config_merge 的
use-after-free 问题。先加载配置文件,再用命令行参数覆盖。
- tests/http10_backend.py: 新增 HTTP/1.0 后端模拟器,用于测试连接池兼容。
- tests/integration_test.sh: 添加 HTTP/1.0 后端兼容测试,验证两次连续请求
均成功(第二次必须新建连接)。
|
2026-06-09 12:35:26 +08:00 |
|
xfy911
|
25a0b100c1
|
docs(plan): 更新计划,标记 HTTP/2 代理完成,新增连接池 HTTP/1.0 兼容待办
|
2026-06-09 09:39:56 +08:00 |
|
xfy911
|
7fe52a3b6e
|
feat(http2): 添加 HTTP/2 反向代理支持
实现 HTTP/2 客户端连接通过 HTTP/2 流转发到 HTTP/1.1 后端:
- 在 http2.c 中新增 http2_serve_proxy() 函数
- 实现请求重组:将 HTTP/2 伪头(:method, :path, :authority)重组为 HTTP/1.1 请求
- 实现后端响应解析:解析 HTTP/1.1 响应头并通过 nghttp2 提交 HTTP/2 响应帧
- 过滤 hop-by-hop 头(Connection, Transfer-Encoding 等)
- 添加 X-Forwarded-For 头
- 支持 TLS 和非 TLS 后端连接
- 在 server.c 中注入代理配置到 HTTP/2 会话
- 修复 parse_http1_response 中 body_len 下溢问题
- 添加 HTTP/2 代理集成测试
当前限制:
- 采用非流式方案(先收集完整后端响应再发送)
- 连接池对 HTTP/1.0 后端(无 keep-alive)处理有待完善
- 单元测试:142 项全部通过
- 集成测试:HTTP/2 GET 代理测试通过
|
2026-06-09 09:39:08 +08:00 |
|
xfy911
|
9000cdb23a
|
docs(plan): 更新计划,标记加权轮询完成,新增 HTTP/2 代理待办
|
2026-06-09 06:08:30 +08:00 |
|
xfy911
|
dc765854a1
|
feat(proxy): 平滑加权轮询负载均衡
- proxy.h: 后端添加 weight / current_weight 字段
- proxy.c: 实现平滑加权轮询算法(Nginx SWW),按权重比例分配请求
- proxy.c: 健康后端优先选择, unhealthy fallback 机制保留
- config.c: JSON 解析器新增 weight 字段解析
- cocoon.h: 代理配置结构添加 weight 字段
- server.c: 加载代理规则时传入 weight
- cocoon.json: 示例配置展示多后端权重 3:1
- tests: 新增加权轮询集成测试(3项),验证配置加载与多后端分布
- 142 单元测试 + 93 集成测试全部通过
- 编译零警告
|
2026-06-09 06:07:06 +08:00 |
|
xfy911
|
23574ab2ba
|
feat(proxy): 连接池大小可配置(默认4,最大16)
- proxy.h: COCOON_MAX_POOL_SIZE → COCOON_POOL_MAX_CAPACITY(16) + COCOON_POOL_DEFAULT_SIZE(4)
- proxy.c: proxy_pool_init 接收 max_pool_size,自动裁剪到上限
- proxy.c: proxy_add_rule 新增 pool_size 参数
- cocoon.h: 配置结构新增 pool_size 字段
- config.c: JSON 解析 pool_size 数字字段,默认值为 4
- server.c: 调用 proxy_add_rule 时传入配置值
- cocoon.json: 示例配置添加 pool_size 展示
编译零警告,142 单元测试 + 90 集成测试全部通过。
|
2026-06-09 03:06:50 +08:00 |
|
xfy911
|
ff1b56fc9e
|
docs(plan): 更新计划,标记连接池完成
- 待办池:连接池完成,新增 HTTP/2 代理支持待办
- 最近行动记录:新增 2026-06-09 连接池/keep-alive 条目
|
2026-06-09 00:21:59 +08:00 |
|
xfy911
|
e13ff5402a
|
feat(proxy): 后端连接池/keep-alive,避免每次请求新建 TCP
- proxy.h: 新增 cocoon_pooled_conn_t / cocoon_conn_pool_t (pthread_mutex 保护)
- 每个后端最多4个空闲连接,30秒空闲超时
- 支持 HTTP 和 HTTPS 后端,复用 tls_conn / fd
- proxy.c: 实现 proxy_pool_init/destroy/acquire/release + proxy_config_destroy
- proxy.c: proxy_relay_backend 使用连接池获取/归还,向后端发送 Connection: keep-alive
- proxy.c: 修复后端关闭连接后复用导致客户端超时的问题
- recv 返回 0 时不再归还到池中,直接关闭并重建
- server.c: server_destroy 调用 proxy_config_destroy 清理所有连接池
- 编译零警告,142 单元测试 + 90 集成测试全部通过
|
2026-06-09 00:21:22 +08:00 |
|
xfy911
|
c3716cd704
|
docs(plan): 更新计划文件,标记健康检查与 SIGPIPE 修复完成
|
2026-06-08 21:27:48 +08:00 |
|
xfy911
|
77979b44d8
|
feat(proxy): 后端被动健康检查 + 修复 SIGPIPE 崩溃
- 在 cocoon_proxy_backend_t 中增加健康状态字段(healthy/fail_count/success_count/last_check)
- 实现 proxy_relay_backend() 辅助函数,支持流式转发响应
- 代理请求时优先尝试 healthy 后端,全部失败后再 fallback 到所有后端
- 健康阈值:连续 2 次成功恢复,连续 3 次失败标记不健康
- 修复 SIGPIPE 信号导致进程在客户端提前关闭连接时崩溃的问题
- 全部 142 单元测试 + 90 集成测试通过
|
2026-06-08 21:26:33 +08:00 |
|
xfy911
|
61d9b01ed6
|
docs(plan): 更新 Prometheus 指标端点开发记录
- 标记反向代理负载均衡和 Prometheus 指标为完成
- 更新项目状态:142 单元测试 + 90 集成测试全部通过
- 记录 /_metrics 端点实现详情
|
2026-06-08 18:11:10 +08:00 |
|
xfy911
|
8ad8ecaaef
|
feat(metrics): Prometheus /_metrics 端点 + 响应码分类计数器
- 新增 7 个原子计数器:total_requests, response_2xx/3xx/4xx/5xx/200/404
- 在 handle_request 所有响应路径统一调用 update_metrics() 更新计数器
- 新增 /_metrics 端点,返回 Prometheus 文本格式(10 项指标)
- 计数器:requests_total, response_2xx_total, response_3xx_total,
response_4xx_total, response_5xx_total, response_200_total,
response_404_total
- 仪表盘:uptime_seconds, connections_active, connections_max
- 集成测试:新增 8 项 Prometheus 指标测试(状态码、字段检查、
HEAD 支持、计数器递增验证)
- 编译零警告,142 单元测试 + 90 集成测试全部通过
|
2026-06-08 18:09:08 +08:00 |
|
xfy911
|
c3d4b112d7
|
docs(config+plan): 负载均衡示例 + 开发记录更新
- cocoon.json: 展示多后端负载均衡配置(/api -> 3000/3001)
- .cocoon-plan.md: 标记负载均衡完成,更新待办池和最近行动记录
|
2026-06-08 16:17:14 +08:00 |
|
xfy911
|
acda3b9c3e
|
feat(proxy): 反向代理负载均衡(轮询 + 故障转移)
- proxy.h: 重构数据结构,支持多后端(cocoon_proxy_backend_t)
- proxy.c: 实现轮询调度 + 自动故障转移(后端失败时尝试下一个)
- proxy.c: proxy_add_rule 支持同 prefix 追加后端,自动合并为多后端规则
- server.c: 匹配 proxy.h 新签名
- 编译零警告,142 单元测试 + 82 集成测试全部通过
|
2026-06-08 16:15:51 +08:00 |
|
xfy911
|
a2444e18de
|
docs(plan): 再次恢复开发 — 用户指示继续 cocoon,不暂停
|
2026-06-08 15:58:56 +08:00 |
|
xfy911
|
06e34e5a39
|
docs(readme): 更新反向代理文档与配置示例
- 特性列表新增反向代理条目
- 路线图标记反向代理为完成
- 模块职责表新增 proxy.c / proxy_tls.c
- 新增配置文件示例(含反向代理配置)
|
2026-06-08 12:04:29 +08:00 |
|
xfy911
|
4cb840c464
|
docs(plan): 更新开发记录 — 恢复开发 + HTTPS 反向代理完成
|
2026-06-08 11:38:11 +08:00 |
|
xfy911
|
a86b8a4856
|
feat(proxy): HTTPS 反向代理后端支持
- 新增 proxy_tls.c/h:轻量级 OpenSSL 客户端封装
- proxy.c:支持 HTTPS 后端连接(TLS 握手 + SNI + 透传 X-Forwarded-Proto: https)
- 集成测试:新增 HTTPS 后端 Python 脚本 + 2 项代理测试
- 编译零警告,142 单元测试 + 82 集成测试全部通过
|
2026-06-08 11:37:30 +08:00 |
|
xfy911
|
de88bbc692
|
docs(plan): 恢复项目开发 — 用户指示继续 cocoon,暂停 ephemeral 方向
|
2026-06-08 11:25:08 +08:00 |
|
xfy911
|
b6edd5ef67
|
docs(plan): 更新维护检查记录 — 2026-06-08 09:00
|
2026-06-08 09:01:50 +08:00 |
|
xfy911
|
b289a09898
|
docs(plan): 更新维护检查记录 — 2026-06-08 06:00
|
2026-06-08 06:02:03 +08:00 |
|
xfy911
|
f3d53af5de
|
docs(plan): 更新维护检查记录 — 2026-06-08 03:00
|
2026-06-08 03:01:23 +08:00 |
|
xfy911
|
61d8af0a8a
|
docs(plan): 更新维护检查记录 — 2026-06-08 00:00
|
2026-06-08 00:05:59 +08:00 |
|
xfy911
|
90b0388892
|
fix(server): 移除 coco_version() 调用,修复链接错误
coco v2.2.0 子模块中 version.c 未编译进 libcoco.a,
导致 coco_version() 符号未定义。移除 3 行重复的信息日志
(似乎是历史合并遗留),编译恢复通过。
- 编译: 零警告(仅 coco 子模块 .S 文件 linker 提示)
- 单元测试: 142 个全部通过 ✓
- 集成测试: 80 项全部通过 ✓
|
2026-06-08 00:05:31 +08:00 |
|
xfy911
|
e2bceeaa44
|
docs(plan): 更新维护检查记录 — 2026-06-07 21:00
|
2026-06-07 21:02:21 +08:00 |
|