Skip to content

WebSocket

完整协议见 WebSocket 协议,本页给出 API 视角的常见调用模式。

连接

ws://localhost:8000/ws?token=<access_token>

token 用 query string 传(浏览器 WS API 不支持自定义 header)。后端在 accept 后立刻校验 + 续签机制(ADR 0011)。

订阅

连接后发送:

json
{ "type": "subscribe", "channel": "project:1:preannotate" }

可订阅多个 channel;取消:

json
{ "type": "unsubscribe", "channel": "project:1:preannotate" }

通道列表

通道谁订阅内容
project:{id}:preannotate该项目工作台 / /ai-pre预标进度 / 错误
project:{id}:annotation工作台协作(多人同任务)谁在编辑
task:{id}:lock工作台锁状态变更
global:prediction-jobsadmin(Topbar 徽章)全局 in-flight job
user:{uid}:notify当前用户系统通知 / 邀请

global:prediction-jobs 仅 admin 角色订阅得到(服务端校验)。

消息体

服务器 → 客户端:

json
{
  "channel": "project:1:preannotate",
  "type": "progress",
  "data": { "job_id": "...", "i": 3, "n": 10 }
}

通用字段 channel + typedata payload 按通道而异。

心跳

服务器每 25s 发 {"type": "ping"},客户端回 {"type": "pong"}。60s 内无收发关闭连接。

Token 续签

access token 默认 30min。WS 连接长寿命,到期前 5min 服务端推:

json
{ "type": "token-expiring", "expires_in": 300 }

客户端调 POST /api/v1/auth/refresh 拿新 token,再发:

json
{ "type": "reauth", "token": "<new_access_token>" }

不重连,复用 socket。详见 ADR 0011

专用端点

ws://localhost:8000/ws/prediction-jobs?token=...

仅 admin,等价于 subscribe global:prediction-jobs,但去掉了订阅 step(直接连即订阅)。前端 useGlobalPreannotationJobs hook 用此端点。

错误处理

服务器主动断开会发 close frame:

code含义
4001token 缺失
4003token 无效 / 过期且未 reauth
4029连接数超限(per-user 限流)

Released under the MIT License.