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 |
|
xfy911
|
2a5ce429db
|
docs(plan): 更新维护检查记录 — 2026-06-07 18:00
|
2026-06-07 18:02:51 +08:00 |
|
xfy911
|
2fa7e538a8
|
docs(plan): 标记项目暂停,核心任务转向 ephemeral
|
2026-06-07 12:01:40 +08:00 |
|
xfy911
|
fd66e71f1a
|
feat(sched): 接入 coco v2.2.0 新特性 — 热栈复用 + P 绑定 + 版本日志
|
2026-06-07 09:49:26 +08:00 |
|
xfy911
|
242a6c7822
|
chore(coco): 升级 coco 子模块至 v2.2.0 (8b42e98)
|
2026-06-07 09:41:54 +08:00 |
|
xfy911
|
81be40086f
|
docs(plan): 更新规划文件 — 标记 Doxygen 注释完成并更新待办池
|
2026-06-07 09:06:12 +08:00 |
|
xfy911
|
9da9bd9449
|
docs: 为 config.c、log.c、tls.c 添加函数级 Doxygen 注释
- config.c: 为 JSON 解析器内部函数和公共 API 添加完整注释
- log.c: 为日志级别转换和输出函数添加注释
- tls.c: 为 TLS 连接管理、Memory BIO 操作和 ALPN 回调添加注释
- http2.c: 移除过时的 TODO 占位注释(请求体收集已实现)
|
2026-06-07 09:05:45 +08:00 |
|
xfy911
|
3762343889
|
docs(plan): 更新规划文件 — 标记编译警告修复完成
|
2026-06-07 06:07:22 +08:00 |
|
xfy911
|
1b930aa5e1
|
fix: 消除编译警告并修复测试清理逻辑
- 将 config.c 和 proxy.c 中的 strncpy 替换为 memcpy + 显式 null 结尾,
消除 GCC -Wstringop-truncation 警告
- 修复 integration_test.sh 的 kill_server 函数,补充对 -c 配置方式启动的
服务器进程的清理,避免端口占用导致后续测试失败
编译零警告,142 个单元测试 + 80 项集成测试全部通过
|
2026-06-07 06:06:59 +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 |
|
xfy911
|
b04904cc78
|
docs(plan): 更新规划文件 — 标记 HTTP/2 POST 支持完成
|
2026-06-07 00:06:04 +08:00 |
|
xfy911
|
0bf37ba3f0
|
feat(http2): 实现 HTTP/2 POST 请求体支持
- on_data_chunk_recv_callback: 将 DATA 帧数据追加到 stream->request.body
- on_frame_recv_callback: 根据请求方法选择处理方式(POST → http2_serve_post)
- http2_serve_post: 处理 HTTP/2 POST 请求
- 支持 multipart/form-data 文件上传
- 支持 JSON 和 form-urlencoded 回显
- 构建 JSON 响应并通过 nghttp2 发送
- 包含 multipart.h 和 platform.h 到 http2.c
- 142 个单元测试 + 77 项集成测试全部通过,编译零警告
|
2026-06-07 00:06:00 +08:00 |
|
xfy911
|
4105aec916
|
feat(websocket): 实现 WebSocket 空闲超时处理 + 跨平台 poll/select 抽象
- platform.h / platform.c: 新增 cocoon_socket_poll_readable() 跨平台 socket 可读等待
- POSIX: poll() + POLLIN
- Windows: select() + fd_set(readfds)
- websocket.c: ws_handle_connection() 实现 timeout_ms 空闲超时处理
- 每次循环前调用 poll_readable() 等待数据或超时
- 超时时发送 1001 Idle timeout 关闭帧,清理连接资源
- 解决遗留 TODO: /* TODO: 超时处理 */
- tests/websocket_test.py: 新增 test_timeout() 测试
- 连接后不发帧,验证服务端 2 秒后发送 1001 关闭帧
- tests/integration_test.sh: 新增 WebSocket 空闲超时集成测试
- 启动 -o 2000 短超时服务器验证超时行为
- Makefile: 补全 test_websocket 编译规则,加入 platform.c
- 修复 undefined reference 错误
- 全部 142 单元测试 + 77 集成测试通过,编译零警告
|
2026-06-06 21:16:54 +08:00 |
|
xfy911
|
f868128b75
|
docs(plan): 更新规划文件 — 标记 CI、Makefile、README 更新完成
- 添加 CI 自动化、Makefile 测试目标完善、README 同步更新到已完成列表
- 记录本轮行动记录
|
2026-06-06 18:09:57 +08:00 |
|
xfy911
|
068ab7d87e
|
docs(readme): 同步项目现状,补充新功能与 CI badge
- 添加 CI badge(GitHub Actions)
- 特性表格:补充访问日志、HTTPS、HTTP/2、WebSocket、中间件、插件、
健康检查、跨平台等已完成特性
- 命令行参数:补充 --cors、--auth-user、--auth-pass、--rate-limit、
--access-log、--plugin 等新选项
- 模块职责:补充 access_log.c、config.c、multipart.c、tls.c、http2.c、
websocket.c、middleware.c、plugin.c、platform.c
- 路线图:标记 HTTPS/HTTP/2/WebSocket/中间件/插件/健康检查/跨平台为已完成
- 构建说明:补充 unit-test 和 test-all
|
2026-06-06 18:09:33 +08:00 |
|
xfy911
|
b0ae0f71c8
|
ci(github): 添加 GitHub Actions 工作流
- 在 push/PR 时自动编译和运行测试
- 安装 Ubuntu 依赖:liburing-dev libz-dev libbrotli-dev libssl-dev libnghttp2-dev
- 构建 coco submodule、编译 cocoon、运行单元测试和集成测试
- 可选运行性能基准(wrk)
|
2026-06-06 18:08:17 +08:00 |
|
xfy911
|
87f89f5722
|
build(makefile): 添加 integration-test 别名和 test-all 目标
- integration-test: 作为 test 的别名,更直观
- test-all: 一键运行单元测试 + 集成测试
- 更新 .PHONY 声明
|
2026-06-06 18:08:11 +08:00 |
|
xfy911
|
e77e83e0c8
|
docs(plan): 更新规划文件 — 标记插件热重载完成
|
2026-06-06 15:11:52 +08:00 |
|
xfy911
|
80385d9657
|
feat(plugin): 插件热重载支持(SIGUSR1)
- plugin.c/plugin.h: 新增 cocoon_plugin_reload() 热重载 API
- 自动存储已加载插件路径,卸载后按原路径重新加载
- main.c: 注册 SIGUSR1 信号处理器,触发插件热重载
- 添加 --help 中 Signals 说明文档
- 集成测试:新增 2 项热重载测试(功能验证 + 日志验证)
- 全部 142 个单元测试 + 77 项集成测试通过
|
2026-06-06 15:11:17 +08:00 |
|
xfy911
|
4b647cd540
|
docs(plan): 更新规划文件 — 标记健康检查端点完成
- 集成测试数量更新为 75 项
- 单元测试数量更新为 142 个
- 添加最近行动记录
|
2026-06-06 12:09:50 +08:00 |
|
xfy911
|
09e592d631
|
feat(health): 添加服务器健康检查端点 /_health
- 新增 /_health 路由,返回 JSON 格式的服务器状态
- 包含:uptime、活跃连接数、最大连接数、插件列表、中间件列表
- 中间件注册表新增 cocoon_middleware_list() 查询 API
- 集成测试新增 7 项健康检查验证(状态码、JSON 字段、HEAD 支持)
- 编译零警告,142 个单元测试 + 75 项集成测试全部通过
|
2026-06-06 12:08:39 +08:00 |
|
xfy911
|
b5acd7f5d1
|
docs(plan): 更新规划文件 — 标记插件数组支持完成
|
2026-06-06 09:08:05 +08:00 |
|
xfy911
|
2dc29d0687
|
feat(config): 插件配置支持 JSON 数组格式
- 极简 JSON 解析器新增 '[' / ']' token 支持
- plugins 字段可同时兼容字符串和字符串数组
- 向后兼容:单字符串 "plugins.so" 仍有效
- 向前扩展:数组 ["a.so", "b.so"] 支持多插件
修复:
- .gitignore 添加遗漏的 test_websocket 二进制
- Makefile 补全 test_log 单元测试编译规则
- cocoon.json 示例改为数组格式
- test_config.c 新增 3 项 plugins 解析测试(字符串/单数组/多数组)
全部 142 个单元测试 + 68 项集成测试通过 ✓
|
2026-06-06 09:07:28 +08:00 |
|