MINESWEEPER 系统设计
原型文档 · 非正式发布返回游戏 ↗
规则与架构设计 v0.8.1

账号、私人同步与每日在线架构#

设计版本 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.12026-09-13收紧录像大小/事件上限;双hash上传前去重;补流式拒收、配额、慢连接及验证资源保护
0.8.02026-09-13Redis限每日榜单缓存与官方录像TTL存储;录像正文移出SQLite,不设录像到期清理job;补跨库故障与持久化边界
0.7.02026-09-13移除直播入口/协议/三张专用表;观看仅限每日公榜录像,保留四榜与私人同步;整理审阅范围
0.6.02026-09-13初中高与综合四榜独立;单项1段/综合3段,录像共享、统一冻结、跨端分段提交;48项DDL检查通过
0.5.02026-09-13明确多端离线升级;服务器出题;先成绩后压缩证据;严格冻结与历史开放;本版移除PVP
0.4.02026-09-13按多人规则1.1引入在线领域,个人录像改为仅本机
0.3.02026-09-12移除Redis,采用SQLite和单进程保护
0.2.02026-09-12基础API、表、事务与验证草案
0.1.02026-09-12初版账号与离线同步