第 27 章是并发编辑问题的代表作。合作解谜里玩家改的是同一个开关,协作建造里玩家改的是同一片世界——两把铲子同时挖同一格、两个人同时把方块放进同一位置,都必须在服务端得到唯一结果。本章给出的方案是混合式的:空间上先用区域锁把冲突概率降到最低,语义上再用 CRDT 把不可避免的并发合并成确定结果。区域锁管「谁现在能写」,CRDT 管「同时写了怎么合」。
本章定位
- 全集位置:第 27 章,属「同步协作」层,是第 26 章从帧级操作到世界状态的一次升维。
- 难度梯度:高阶。CRDT 语义、区域锁租赁与快照回放三者叠加,是全集并发主题的顶点之一。
- 前置章节:第 13 章小队生存系统(小规模协作与资源)、第 20 章社交大厅(身份与房间入口)、第 25 章市场系统(资源与交易)。
- 后续衔接:第 28 章副本脚本系统把「可编辑的世界」升级为「可编程的副本」,第 40 章元宇宙市场与创作经济则把建造产物变成可交易资产。
核心验证目标
- 六层架构:客户端层(输入缓冲)、网络层(WebSocket 加增量同步)、协作层(CRDT 引擎与补丁缓冲)、服务层(区域锁服务)、存储层(快照与增量日志)、监控层(延迟、冲突率与负载热力)。
- 三类 CRDT 对象:位置型(建筑块与地形修改)、状态型(门、灯、开关)、结构型(桥梁、道路、管线等需连通判定的复合结构)。
- 区域锁租赁:地图划分为固定网格(如 32×32 格),每次建造请求租赁锁并设定 5 至 30 秒租期,超时自动释放或事务提交后解锁。
- 增量同步与提交:建造操作带用户与区域标识转发到同步服务器,CRDT 合并后广播增量,客户端回 ACK 序号完成提交。
- 快照与回放安全:世界状态以快照加增量日志存储,支持回放与回滚,保证重连玩家能恢复到一致状态。
- 实时监控:监控延迟、冲突率与区域负载热力图,识别热点区域并动态调整锁粒度。
技术栈建议
| 层次 | 推荐选型 | 说明 |
|---|---|---|
| 服务端 | Go 或 Rust | Rust 适合 CRDT 合并等计算密集逻辑 |
| 客户端 | TypeScript | 建造界面与局部操作缓冲 |
| 协议 | WebSocket 加增量同步 | 心跳维持与增量广播 |
| 状态 | Redis 发布订阅 | 房间内状态分发 |
| 存储 | 快照加增量日志 | 世界状态存档与回放 |
本章文章
| 文章 | 核心内容 |
|---|---|
| 在线联机原型全集:第 27 章 协作建造系统(Cooperative Building System) | 多人实时建造、冲突解决、区域锁定、状态快照与一致性同步 |
与相邻章节的关系
- 上一章:第 26 章 合作解谜系统 在帧级做锁步,本章在世界状态层做合并,两者是并发控制的两个粒度。
- 下一章:第 28 章 副本脚本系统 把世界本身交给脚本驱动,从「玩家编辑」走向「脚本生成」。
- 资产延伸:第 40 章 元宇宙市场与创作经济 让本章的建造产物具备产权与交易属性。