Files
creator-hub/docs/gateway-outbound-channel-plan.md
T

4.8 KiB
Raw Blame History

网关出站通道规划(反转连接方向)

取代 realtime-event-push-plan.md 的通道方向设计。该文档的事件采集、订阅管理、确认语义继续有效;传输层按本文反转。

前提修正

平台部署在公网,网关部署在用户内网(NAT 后,公网入站不可达)。"后台拨号连网关"(HTTP 直连与 /v1/channel WS)在真实部署形态下不可行。只有网关能出站连接平台。

目标形态

  • 平台为每个网关签发 access_key(网关管理页生成、明文回显供配置)。
  • 网关进程通过环境变量/启动参数配置平台地址与 key,主动出站建立 WS 连接(/v1/agent),断线自动重连(退避)。
  • 平台与网关的全部业务通信复用这一条网关发起的连接;旧 HTTP 直连、定时探活整体删除,不留回退。
  • 局域网部署同样成立(网关连平台的内网地址),一套模型覆盖所有形态。

通道消息

平台 ⇄ 网关帧(JSON,单条连接按网关隔离):

方向 类型 说明
网关→平台 hello 认证(连接层 Bearer key)后首帧:网关版本、能力
网关→平台 heartbeat 周期健康上报:版本、运行中浏览器数;平台据此维护 online/last_seen_at
平台→网关 task {id, method, path, payload},method/path 复用原 HTTP 语义
网关→平台 result {id, status, body, error};网关对重复 task id 幂等拒绝
网关→平台 event 事件投递批次(原 deliveries 语义,含 subscription/alias)
平台→网关 event_ack 平台事务保存成功后确认;未确认批次网关保留、重连后重推

统一任务模型

所有后台→网关通信都是持久化任务(gateway_task 表):

  • 同步操作(前端按钮触发):创建任务 → 网关在线则下发并等待 result(超时明确失败)→ 返回调用方。网关离线时同步操作立即失败并提示,不入队等待。
  • 异步任务(采集、事件类):创建任务 → 积压;下发器按网关分组、按 id 序补发,网关上线后执行。
  • 下发后连接中断的任务标记 failed(连接中断,结果未确认),不自动重发有副作用的操作;仍为 pending 的任务继续等待。
  • 全量任务即执行记录:方法/路径、状态、错误、响应码、耗时;响应体不落库(结果语义在业务表中)。保留策略后续再定(TODO)。

数据库(迁移 1058)

  • gateway:删除 endpoint/health_status/last_check_reason/last_checked_at;新增 access_key、online、last_seen_at、version。
  • 新表 gateway_task:gateway_id、method、path、payload jsonb、status(pending|dispatched|succeeded|failed)、response_status、error、response_bytes、timeout_seconds、创建/下发/完成时间。
  • browser_env.gateway_id 等关联不变;账号与网关的绑定关系不变。

平台侧

  • fiber /v1/agent WS 升级(fasthttp/websocket),连接层 key 认证,单网关单连接会话注册表。
  • gatewayCall/gatewayCallWithLimit 实现替换为「创建任务 + 等待 result」,签名不变,全部业务调用点代码不动。
  • 事件流:session 收 event 帧按 alias 路由到监听 worker,worker 事务保存后回 event_ack;原 /v1/channel 拨号代码删除。
  • 健康状态由会话维护(在线/离线/从未连接),定时探活代码删除。

网关侧

  • 新增出站 agent:连接、认证、重连退避、心跳线程、任务分发线程池、事件推送线程(复用 SubscriptionManager 变更通知与未确认重推)。
  • _route 业务分发逻辑抽为纯函数供任务分发调用;HTTP 监听(含 /healthz、/v1/channel)整体删除;proxy.py 数据面保留。
  • 配置:CREATOR_PLATFORM_URL、CREATOR_GATEWAY_KEY 环境变量(启动参数等价)。

前端(网关管理)

  • 创建/编辑:名称 + 生成/重置 key(回显平台地址与 key 的配置指引)。
  • 列表:在线状态(在线/离线/从未连接)、版本、任务队列 pending 计数。
  • 执行记录:每网关任务列表分页(时间、方法+路径、状态 Tag、耗时、错误)。

测试与完成标准

  • Go:认证/会话/心跳、任务下发等待超时、离线失败、断线中断、pending 补发、result 落库、event 路由与 ack;race 检查。
  • Python:出站连接、认证失败、重连、task 分发(含重复 id 幂等)、result 回传、event 推送与未确认重推、心跳。
  • Web:网关管理改造、执行记录分页;antd lint 清零、build 通过。
  • 迁移 1058:新库、旧库升级、重复启动三态验证。
  • 单元覆盖率 ≥ 65%;不编写/运行 E2E。