前面几章里,服务器权威的含义是「由我判定」。第 8 章给它加了一个更苛刻的约束:由我判定,同时由我保密。战舰里每方布阵对敌人不可见,UNO 里手牌只对自己可见,服务器必须持有完整真相,却要把这份真相切片后分别下发,任何一个客户端的视角里都不能泄露对手的隐藏状态。这条约束把「权威性(Authority)」推进到「保密性(Confidentiality)」,也第一次让对局日志变成需要密码学保护的对象。
本章定位
- 难度梯度:进阶。逻辑复杂度不高,但引入服务端视角裁剪与日志完整性两个安全性命题。
- 前置章节:第 7 章 贪吃蛇大作战 被标注为依赖模块,本章复用了其实体状态管理与快照机制。
- 能力跃迁:从「下发正确的状态」跃迁到「下发正确的子集」。每个客户端收到的都是同一份真相的裁剪视图。
- 阅读时长:单篇 PRD 约 480 行,建议重点读状态加密、动作哈希签名与哈希链审计三节。
核心验证目标
- 服务端保密状态:完整状态仅存于服务端,客户端只能看到自己视角的切片,任何接口都不得泄露对手布阵或手牌。
- 回合状态控制:轮流机制与回合计时,超时自动跳过或弃权,避免一方挂机卡死整局。
- 动作验证与防作弊:提交动作携带哈希签名,防篡改、防重放,服务端校验后才生效。
- 状态快照与断线重连:重连玩家通过 Snapshot 恢复到自己视角的正确状态,且不得借此窥探对手。
- 确定性回放:从动作日志重放完整对局过程,重放结果必须与当时逐帧一致。
- 哈希链审计:日志按哈希链串联,任何事后篡改都会破坏链条,为争议仲裁提供依据。
- 双模式复用:战舰与 UNO 共用同一套房间、保密与审计框架,验证框架的通用性。
技术栈建议
- 语言:Go、Rust 或 TypeScript。Rust 在哈希与序列化一致性上更稳妥。
- 传输:WebSocket,或 HTTP 加 WebSocket 混合,非实时动作可走 HTTP。
- 存储:动作日志持久化并按哈希链组织,快照单独存放。
- 关键设计:把「视角裁剪」做成独立的 View Projector,任何下发消息都必须经过它,这是防止越权泄露的结构性保障。
本章文章
| 文章标题 | 核心内容 |
|---|---|
| 在线联机原型全集:第 8 章 战舰(Battleship) / UNO 简版 | 完整 PRD:GameRoom、保密状态层、动作校验、Snapshot 恢复与哈希链审计,含战舰 10×10 布阵规则与 UNO 简版牌型判定 |
本章只有一篇 PRD;反作弊的信号体系在游戏服务端实战专题中有更完整的讨论。
与相邻章节的关系
- 上一章:第 7 章 贪吃蛇大作战 处理广播范围,本章处理广播内容的保密裁剪。
- 下一章:第 9 章 协作扫雷 把「隐藏信息」翻转成「共享状态」,开始处理多人同时写入同一资源的冲突。