这一卷的写法
卷二延续卷一的写法:每一节先给一个真实场景,再给一条可复核的规则,最后给一个能运行的产物。区别在于,卷二的产物大多与外部系统打交道——网络、商店、CDN、服务端。这些系统没法在本地完整复现,所以本书采用「可运行 + 可建模」的分层写法。
双案例与数字口径
两个案例属于同一 IP、同一工作室:
| 维度 | 潮汐消消 | 潮汐方舟 |
|---|---|---|
| 形态 | 休闲,弱联网 | 中重度,强联网 |
| DAU | 80 万 | 25 万 |
| 单局 / 单场 | 90 秒 | 8–12 分钟 |
| 首包 / 总资源 | 120MB / 480MB | 350MB / 1.8GB |
| RTT P95 | 310ms | 240ms |
| 弱网会话占比 | 22% | 14% |
| 每会话流量 | 3.2MB | 18MB |
| 热更节奏 | 双周 12MB | 每周 45MB |
这些数字是案例设定值,用于演练判断口径,不是任何线上产品的实测数据。凡是需要真实测量的指标,本书会明确写出测量方法,而不是给出一个看似精确的数字。
完整的网络与资源事实表在附录 B。全卷所有数字只能来自那张表和卷一附录 B;正文不会出现第二套 DAU、包体或帧率。
三档可运行标准
卷二沿用卷一的分级,但把重点放在「能验证什么」:
| 档位 | 含义 | 卷二中的例子 |
|---|---|---|
| L1 | 纯函数或状态机,可直接 node --test | 退避计算、差量补丁、依赖图环检测 |
| L2 | 需要 mock 外部依赖,可在本地跑通 | 下载器、灰度分组、热更状态机 |
| L3 | 只能建模,给出结构与判定规则 | 商店审核政策、CDN 回源拓扑 |
每一节正文的代码块都带三行头:
// file: src/net/backoff.ts
// tier: L1
// verify: node --test test/net/backoff.test.ts
file是产物在实验工程中的路径;tier是这一节的可运行档位;verify是验证这条产物的命令。
代码块内容与实验工程中的文件逐字节一致。这样做的目的不是让你复制粘贴,而是保证书里的每一段代码都真的跑过测试,而不是示意。
mga-net-lab 的结构
实验工程按主题分目录,每个文件自包含,只依赖 node: 内置模块:
mga-net-lab/
├─ src/net/ 连接、协议、重连、离线队列、同步、战报、流量
├─ src/resource/ 依赖图、分组、打包、首包、按需下载
├─ src/hotfix/ 商店政策、内容边界、失败演练、差量、灰度、回滚
├─ src/cdn/ 下载器、CDN 规划、失败降级
├─ src/delivery/ 交付流水线
├─ src/lab/ 指标矩阵、评审门禁
└─ test/ 与 src 镜像
运行方式:
cd mga-net-lab
node --test test/net/*.test.ts
node --test test/resource/*.test.ts
node --test test/hotfix/*.test.ts
要求 Node 26 及以上。代码使用原生类型剥离,不需要编译步骤,也不依赖任何第三方包。
三种阅读路径
路径一:按章顺序。 第 1–3 章建立网络基础,第 4–6 章处理离线与同步,第 7 章算账,第 8–12 章讲资源与交付,第 13 章收口。适合第一次系统梳理这条链路的人。
路径二:按问题查。 线上正在掉线,直接读第 3 章;首包太大,读第 8–9 章;热更出事故,读第 10–11 章;下载失败率高,读第 12 章。每节末尾的「常见错误与边界」可以当作排查清单。
路径三:按产物读。 先看附录 B 的事实表,再挑感兴趣的产物文件,最后回到正文看它解决什么问题。适合已经有架构经验、只想找可复用实现的读者。
与相邻卷的边界
- 服务端拓扑、战斗同步算法、分布式一致性属于服务端书稿的范围,卷二只写客户端责任与契约。
- 小游戏平台的买量、版号与出海不在本书范围;卷二只讨论原生 Android/iOS 与渠道包。
- 卷三讨论商业化与发行工程,卷二只在与支付、活动配置相关的地方提到接口边界。
- 卷四讨论平台化与长线治理,卷二的流水线与门禁会在卷四被组织成平台能力。
一个约定:先记账,再优化
卷二反复使用一个方法:先记账,再优化。
- 流量先按「一次会话由哪些消息构成」记账,再谈压缩。
- 包体先按「首包、分包、按需」记账,再谈瘦身。
- 热更先按「内容类型 × 平台政策」记账,再谈自动化。
- 下载先按「分片 × 并发 × 失败率」记账,再谈 CDN 选型。
没有账本的优化,最后都会变成「感觉快了一点」。记账不保证优化成功,但能保证每次优化都可复核。
约定与反馈
文中的公司、产品、人物均为虚构;数字为案例设定;代码为教学用最小实现,直接用于生产前需要补齐错误处理、日志、安全校验与平台适配。
如果某一节的产物在你的环境里跑不通,先检查 Node 版本与文件路径,再对照三行头确认引用的是同一份文件。
继续阅读
探索更多技术文章
浏览归档,发现更多关于系统设计、工具链和工程实践的内容。