账号、私人同步与每日在线架构#
设计版本 0.8.1 · 2026-09-13 · 基于Web 1.20.2及多人规则1.5。未实现的设计提案,本次不修改游戏版本或构建应用。
1. 总体选择#
采用本地IndexedDB+HTTPS私人同步+WSS在线裁决+单实例Node.js/TypeScript/Fastify+SQLite+Redis。SQLite开启WAL/foreign_keys/synchronous=FULL;写调度单实例,地图生成与录像核验使用有界工作线程。Redis只缓存每日四榜与存储官方录像正文/播放块;账号与进度仍查SQLite,不部署多个独立写入API实例。
设计目标:普通离线不断玩,多端成长不重复;今天每日服务器统一出题;初中高与综合各有Top10,任一榜成为候选才请求上传缺失压缩官方录像;核验后入榜;UTC换日冻结历史。本版移除直播与PVP,聚焦账号同步和每日四榜。
flowchart TB Local[本地档案与outbox] --> Sync[私人同步 API] Personal[个人录像仅本机] --- Local Gen[服务端生成与验证每日图] --> DB[(同一个 SQLite)] Input[今天每日实时操作] --> Engine[权威时间与状态裁决] Engine --> DB Sync --> DB Draft[本机官方过程草稿] --> Candidate[先报成绩取得上传资格] Candidate --> Upload[仅缺失段 gzip 上传与重演] Upload --> Rank[再次比较并原子发布Top10] Rank --> DB Upload --> Redis[(Redis / 官方gzip与播放块 / TTL)] DB --> Cache[四榜同代快照缓存] Cache --> Redis DB --> Gate[当天受限观看 / 历史开放观看] Redis --> Gate
查看流程图源文
flowchart TB
Local[本地档案与outbox] --> Sync[私人同步 API]
Personal[个人录像仅本机] --- Local
Gen[服务端生成与验证每日图] --> DB[(同一个 SQLite)]
Input[今天每日实时操作] --> Engine[权威时间与状态裁决]
Engine --> DB
Sync --> DB
Draft[本机官方过程草稿] --> Candidate[先报成绩取得上传资格]
Candidate --> Upload[仅缺失段 gzip 上传与重演]
Upload --> Rank[再次比较并原子发布Top10]
Rank --> DB
Upload --> Redis[(Redis / 官方gzip与播放块 / TTL)]
DB --> Cache[四榜同代快照缓存]
Cache --> Redis
DB --> Gate[当天受限观看 / 历史开放观看]
Redis --> Gate审阅入口:系统设计审阅稿。详细入口:Redis设计、四榜规则、经验与防作弊、API与表、每日状态机。
2. 身份与账号#
| 身份 | 本地与云端 | 可用能力 |
|---|---|---|
| 本地游客/命名档案 | 只有local_profile_id,不自动创建云用户 | 普通离线游玩、个人录像、下载历史练习/公共浏览 |
| 云游客 | users.kind=guest,同步会话 | 私人成长/存档同步、今日普通每日;不能正式竞榜 |
| 注册账号 | 稳定user_id、密码identity、设备会话 | 同步、正式每日、符合资格的当天录像观看 |
| 未来SSO | 同user_id关联独立provider/issuer/subject | 后续接入,不按相同邮箱或昵称自动合并 |
账号+密码注册;Argon2id密码哈希;Web使用HttpOnly/Secure/SameSite Cookie,服务器仅存会话hash。SSO只预留身份模型。游客注册升级同一云user,登录现有账号带入游客数据需源/目标双重归属证明与预览。
同账号多端登录不等于抢局。正式尝试同账号最多一场,控制设备接管须明确确认。个人录像仍归本地档案,不随游客合并或换设备登录上传/恢复。
3. 联网、存储与同步范围#
| 数据/行为 | 本机 | 服务端 | 联网与同步 |
|---|---|---|---|
| 账号/密码 | 档案映射、安全Cookie,不保存明文密码 | 用户、身份、密码hash、会话/设备 | 注册、登录、恢复、改密联网 |
| 普通棋局/关卡/设置 | 快照、结果、outbox | 已同步副本、进度/设置 | 离线先存,在线补事实;存档冲突保留分支 |
| 私人XP/军衔/勋章 | 已入账基线+待确认预测 | 奖励账本、日权益、汇总 | 传事实不传任意XP;等级由门槛计算 |
| 个人录像/录制草稿/收藏元数据 | 全部仅本机 | 不存表、不存文件、不存同步删除事件 | 无任何个人录像云同步/云导出接口 |
| 今日地图 | 只收到可见状态 | 生成种子/私图、规则版本、验证报告 | 今天每日必须联网;客户端不生成题 |
| 历史题包 | 下载后缓存,可离线练习 | 已发布历史地图 | 只同步私人进度,历史成绩不上榜 |
| 正式操作/终局 | 自己的可见投影、官方过程草稿 | 当前状态、时间、命令去重与哈希锚点、终局 | 小型操作实时联网,断网点击不补执行 |
| Top10候选/压缩证据 | 待提交官方草稿 | SQLite存候选/授权/key/验证报告;Redis存正文和TTL | 先成绩预选,仅候选上传完整gzip事件记录 |
| 公开Top10 | 列表/短期播放缓冲 | SQLite存四榜/generation/冻结/元数据;Redis存榜缓存及共享回放 | 验证后发布;历史冻结,录像在保留期内开放 |
哪些必须联网:账号操作、首次恢复云数据、今天每日、竞榜预选/上传、查榜和公开回放观看。哪些可离线:经典/自定义/已安装关卡、已下载历史每日、个人录像。会话失效只暂停同步,不删本地成果。
4. 私人同步与升级#
本地实体与outbox同事务;服务端op幂等+run/origin唯一+日权益去重。独立新局经验都累计;两份总经验不相加也不取max。例:云端1000、A+50、B+200,最终1250。云端1500同样新增250,最终1750跨过1600门槛升第3档。每日初级已领6后首通144只补138,另一设备再首通不再发。
玩家离线按预计经验即时成长,标待同步;联网重算净待领额。push回执和pull同一效果按版本/事实ID去重,不在新总额之上再加delta。未知来源旧总额迁移保守max,已覆盖事件不重发。等级不单独合并,生命在新局开始时冻结,局中同步不加血。
私人快照/legacy导入/export用白名单,排除replayDraft、replays、录制事件与在线内部状态。当前可续局盘可以同步,但不能因此夹带个人录像。正式服务器结果桥接同一日奖励账本,竞榜/回放观看无额外经验。
5. 每日与榜单#
服务端提前生成、独立验证、原子发布三档;客户端取公开谜题信息,今日隐藏图/seed不下发。无合格题时显示不可用,不本地降级出题。当前日普通/正式操作均由服务器裁决;历史地图在原日结束后允许下载练习。
已确认初级、中级、高级、综合四榜,各Top10。单项只需对应一段有效无伤成绩;综合取三档各自最佳用时之和,不要求任何单项进Top10。成绩改善后判断本档与综合各自候选,1或3段核验齐全才发对应榜。同一game录像共享,跨设备可由各来源设备分别上传,服务器按账号关联。四榜不能消除“单项未入围、综合入围且原设备离线”的缺段问题;上一轮可选全程服务器临时存证没有默认启用。
压缩动作录像绑定账号/日期/难度/地图/规则/attempt,与服务器哈希锚点核对并重演。核验通过后先确认Redis正文与公开TTL,再由DB事务检查实时门槛、日期与观看锁,在同一事务重算受影响榜、复制其他榜、发布四榜完整generation;候选不能预占名额,名次可能在上传期间被超越。DB提交后写Redis榜缓存;缓存故障从DB重建,录像正文故障无法从DB恢复。两库没有共同事务,已提交名次不因暂缺录像而自动撤销。
UTC换日四榜一起冻结最后已发布generation;完成、上传、核验、发布必须在日内完成,旧整理期删除。历史不再补录、重排、递补;违规/撤公开只注记并撤播放。历史录像不需通关,观看不锁今天;当天仍保留三档完成+观看确认锁榜机制。
录像正文与播放块全部不入SQLite,Redis绝对TTL自动过期,无录像到期清理job;保留原始名次和元数据。曾准备公开但非最终Top10的正文也允许保留到同一public_until,内存不能只按最终60段估算。
6. 安全与失败边界#
私人离线XP的“已同步”不等于“经过反作弊证明”。重算/去重可以阻止直接改总额与重复奖励,不能完全阻止恶意客户端虚构全新对局。官方榜单用服务器图、时钟、状态及录像核验;自动求解、小号探图、场外协助仍需要风控/人工复核,不能保证完全消除。
个人录像无云备份,用户清本机后不可从云恢复。正式草稿跨端缺前缀会失去提交完整录像能力,但不撤普通成长。录像上传只是归档路径,正式实时操作本来就要联网。
SQLite故障不确认成功,日志/状态/回执同事务。重启先冻结过期日期,不能继续发布旧候选;平台事故未可靠结算标无效。备份恢复撤旧会话/换sync epoch、重放外部删除清单。公开数据删除按在线留存与删除清正文/身份、保留最小脱敏排名引用,不悄悄改历史名次。
7. 版本记录#
| 版本 | 日期 | 变化 |
|---|---|---|
| 0.8.1 | 2026-09-13 | 收紧录像大小/事件上限;双hash上传前去重;补流式拒收、配额、慢连接及验证资源保护 |
| 0.8.0 | 2026-09-13 | Redis限每日榜单缓存与官方录像TTL存储;录像正文移出SQLite,不设录像到期清理job;补跨库故障与持久化边界 |
| 0.7.0 | 2026-09-13 | 移除直播入口/协议/三张专用表;观看仅限每日公榜录像,保留四榜与私人同步;整理审阅范围 |
| 0.6.0 | 2026-09-13 | 初中高与综合四榜独立;单项1段/综合3段,录像共享、统一冻结、跨端分段提交;48项DDL检查通过 |
| 0.5.0 | 2026-09-13 | 明确多端离线升级;服务器出题;先成绩后压缩证据;严格冻结与历史开放;本版移除PVP |
| 0.4.0 | 2026-09-13 | 按多人规则1.1引入在线领域,个人录像改为仅本机 |
| 0.3.0 | 2026-09-12 | 移除Redis,采用SQLite和单进程保护 |
| 0.2.0 | 2026-09-12 | 基础API、表、事务与验证草案 |
| 0.1.0 | 2026-09-12 | 初版账号与离线同步 |