Skip to content

资源锁定

WebSocket 连接使用分布式资源锁保证数据一致性。

锁定规则

资源类型锁范围说明
对话单对话同一对话只允许一个 WebSocket 连接
项目单项目同一项目只允许一个 WebSocket 连接
画布单画布同一画布只允许一个 WebSocket 连接

锁的生命周期

  1. 获取锁:WebSocket 连接建立时自动获取
  2. 持有锁:整个 WebSocket 会话期间持有
  3. 释放锁:连接断开时自动释放
  4. 锁超时:连接异常断开时,锁在超时后自动释放

冲突处理

当资源已被锁定时:

  • 新的 WebSocket 连接尝试会收到 Close Code 4009
  • 客户端应提示用户"该资源正在被使用"
  • 等待前一个连接释放后再重试

补全锁

对话补全(AI 生成回复)有额外的补全锁:

  • 同一对话同一时间只能有一次补全
  • 第二次 request_completion 不会被立即拒绝,而是排队
  • 队列满时(上限 50 条消息),新消息返回错误

锁丢失

极少数情况下,持有锁的连接可能因网络原因丢失锁:

  • 服务端检测到锁丢失后会主动关闭 WebSocket(Close Code 4009
  • 客户端应自动重连

测试要点

测试建议

  1. 锁互斥:同一资源开两个 WS 连接,第二个应被拒绝
  2. 锁释放:关闭 WS 后应能立即建立新连接
  3. 异常断开:模拟网络中断后锁应在超时后自动释放
  4. 补全排队:补全进行中发送新消息应排队而非报错
  5. 队列满:大量快速发送消息直到队列满,应收到错误
  6. 不同资源:锁定对话 A 不影响对话 B 的连接

狐线 AI Pro 外部测试文档