xfy911
|
b426ab7130
|
Phase 5: 反向代理连接池完善 — 连接有效性检测 + 统计指标 + 单元测试
- 新增 proxy_pool_conn_is_alive(): 使用 recv(MSG_PEEK | MSG_DONTWAIT)
非阻塞检测连接是否被对端关闭,复用前自动剔除失效连接
- 新增 cocoon_pool_stats_t 统计结构:总请求、命中、新建、驱逐、
有效性检测失败、活跃连接数、空闲连接数
- 连接池 acquire/release 全流程统计追踪
- 新增 7 项 proxy 单元测试:
- 连接有效性检测(无效 fd、已关闭、有效 socket)
- acquire/release 复用循环
- 空池新建失败边界
- 统计初始状态
- 全部测试通过:458 单元测试 + 115 集成测试
|
2026-06-15 12:23:48 +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
|
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
|
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
|
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
|
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
|
cc06fc073f
|
feat(proxy): 实现反向代理支持
- 新增 proxy.h / proxy.c:路径前缀匹配 → HTTP/1.1 后端转发
- proxy_init/add_rule/match/forward API
- X-Forwarded-For / X-Forwarded-Proto 透传
- 目前仅支持 HTTP 后端,HTTPS 后端拒绝并警告
- cocoon.h:新增 COCOON_MAX_PROXY_RULES=8,cocoon_config_t 添加 proxies 数组
- config.c:JSON 解析器新增 proxies 数组解析(prefix + target)
- server.c:
- connection_t 新增 ctx 指针,用于 handle_request 访问代理配置
- handle_request 中在静态文件服务前检查代理规则
- Makefile:proxy.c 加入 SRCS 和 test_server 编译规则
- cocoon.json:示例配置添加 proxies 数组
- tests/integration_test.sh:新增 3 项反向代理集成测试
- .cocoon-plan.md:标记反向代理为已完成
编译零警告,142 个单元测试 + 80 项集成测试全部通过。
|
2026-06-07 03:09:10 +08:00 |
|