断网关页不丢稿:后端实时存储与增量同步
老架构的两个隐患
原版酒馆的数据保存由前端触发:整份聊天序列化后由浏览器发往后端覆盖。两个后果:
- 丢稿窗口——「你操作了但还没保存」这段时间崩了、断了,数据就没了
- 全量传输——几百楼的长聊天,每编辑一个字都要把整个文件来回传一遍
这里的三层改造
1. 增量补丁替代全量覆盖
新增消息用追加、编辑消息用补丁、元数据变化用深度合并——遵循标准的 JSON Patch 机制,传输和写入都只碰变化的部分。每次写入带完整性哈希,并发写入冲突能被检测出来而不是静默互相覆盖。
2. 变更到达即落盘
所有到达后端的数据变更立即写入磁盘,不设内存缓存、不搞延迟批量。生成结果落盘后,服务端还会在响应里确认(Generation Acknowledge),前端才认为这次生成真正完成。
3. 生成在后端跑
生成任务运行在服务端,通过 WebSocket 流式推送到界面。于是:
- 刷新标签页——回复继续写,回来自动接上
- 合上笔记本盖——服务端照常生成
- Wi-Fi 断了——生成不中断,重连后画面自动恢复
- 中断的生成有恢复预览,不白烧 Token
对多设备玩家的意义
增量补丁加冲突检测,意味着电脑和手机(配合局域网同步)同时写入也不会静默覆盖彼此的修改——冲突会被显式暴露出来让你裁决。
与卡片作者的关联
状态类数据(记忆图、逐楼层变量、CardApp 进度)同样吃这套保障:楼层状态文件与聊天同步落盘,聊天结构变化时自动重放对账——你魔改的 RPG 数值不会因为一次浏览器崩溃就回到一小时前。
架构细节以官方技术文档为准,本页为面向使用者的整理表述。