Expand description
在线翻译协作 Hub 核心逻辑
移植自 Poprako 的“页面级独占编辑 + 整页快照广播”协作模型:
- 在线状态:项目(话数)内每个连接一条在线记录,存 Redis 哈希
hub:{project}:presence - 页面锁:每页一把独占锁,Redis 字符串
hub:{project}:lock:{page}(SET NX EX抢占 + 续约) - 页面快照:整页翻校单元快照,Redis 字符串
hub:{project}:snapshot:{page},供重连/跨实例恢复 - 跨实例广播:本地 DashMap 直发 + Redis pub/sub 频道
hub:fanout转发到其他实例 - 落库:收到快照后 debounce 写入
editor_unit(整页替换)
§键命名约定
project_key形如episode:{episodeId},末段解析为分片键episode_idpage_key形如page:{pageId},末段解析为editor_page.id
Structs§
- Collaboration
Registry - 协作连接注册表(本节点)
- Page
Editor State - 在线编辑者状态(与前端
TranslatorPageEditorState对齐,snake_case) - Page
Snapshot - 页面整页快照
- Project
State - 项目协作状态(项目内全部在线编辑者)
- TryAcquire
Result - 尝试获取页面锁结果
Functions§
- disconnect
- 处理连接断开:释放锁、移除在线状态、广播
- handle_
invocation - 分发一条客户端 Hub 调用
- spawn_
fanout - 启动跨实例广播订阅(多实例部署时转发事件到本节点连接)