v1.4.0
v1.4.0 - 幽灵连接治理 + 账号级串行化 + 前端一键重启
修复:幽灵连接(连接卡死不自动断开)
上游偶尔会出现"发了一半不再吐数据、也不断开连接"的卡死状态,导致该连接永远挂着并拖住后续请求。本次治理:
- 上游流式响应 body 增加 idle 超时(
limits.stream_idle_timeout_sec,默认 120 秒):只要超过该时长没有新数据块,立即取消上游读取并断开下游连接,让客户端感知截断后自行重试,不再有无限期挂起的幽灵连接。 - 控制面请求(session / agent-runs 等)的 body 读取同样带超时兜底,杜绝任何路径挂死。
- 断开后不误伤账号:session 本身正常的话,下一个请求仍可复用,不浪费免费额度。
负载均衡:一个账号一个并发
- 账号级串行化:一个账号同一时间只处理一个 chat(新增账号互斥锁),并发请求按热 session 排队复用,不再同时打在同一个
instanceId上(上游会话不稳定时并发容易互相干扰/顶号)。 - 选号在同层级内优先空闲账号;排队超过
limits.account_chat_wait_ms(默认 120000ms)兜底换号;预算耗尽时自动转入受 idle 超时约束的最终等待,不会误报失败。 - 冷启动原子化保持不变:多个并发请求同时到达仍只创建一个 session。
新增:前端一键「重启服务」(终极兜底)
- 控制台右上角管理员专属「重启服务」按钮(
POST /api/system/restart,仅 admin)。 - 服务端 spawn 自重启子进程等待端口释放后无缝接管并优雅退出;Docker 场景下容器主进程退出会触发
restart: unless-stopped整容器重建,双保险。 - 前端自动轮询
/healthz直到恢复;Web 登录态持久化在/data,重启后无需重新登录。 - 已实测:容器场景(Docker 自动恢复)与裸机场景(子进程接管 + 登录态保留)均验证通过。
其他
- 新增 smoke 回归测试:zero/partial 幽灵连接掐断、账号串行化并发峰值、重启 API 权限与回调。
部署
git pull && docker compose pull && docker compose up -d