《游戏服务端架构·品类、状态与拓扑》1.1 游戏服务端到底在为谁做架构
从北辰工作室三款产品在一次周五晚高峰同时出问题讲起,拆开游戏服务端真正服务的三类对象:玩家、运营与团队;说明有状态、强实时、长会话、玩法耦合四个特殊性如何把普通后端经验推到边界之外,再用房间状态机与状态所有权表落下第一组可验证约束,并给出第一份 ADR。
tag
从北辰工作室三款产品在一次周五晚高峰同时出问题讲起,拆开游戏服务端真正服务的三类对象:玩家、运营与团队;说明有状态、强实时、长会话、玩法耦合四个特殊性如何把普通后端经验推到边界之外,再用房间状态机与状态所有权表落下第一组可验证约束,并给出第一份 ADR。
《游戏服务端架构》卷一《品类、状态与拓扑》全 45 篇的阅读入口:说明本卷要解决的四个问题、十三章结构、北辰三款产品的贯穿案例、序/前言/附录与三条阅读路径,并给出 L1/L2/L3 可运行性口径和 39 篇正文的完整目录。
站内已经有一套从零实现 MMO 服务端的书,为什么还要再写一套架构书?这篇序说明两者的分工:前者回答怎么实现,后者回答为什么这样选、代价是什么;并交代本书的品类视角、北辰三款产品的贯穿案例、四卷结构与对代码和数字的诚实承诺。
《游戏服务端架构》卷一全 45 篇:以品类、状态、时间、连接、权威五个变量为主线,对照北辰工作室三款产品,从拓扑选择写到部署单元与架构基线;含序、前言、目录、附录 A–C、四条阅读路径与可运行性口径,每节附可检查的 Go 夹具或决策表,便于评审时直接对照。
同意不是一次勾选,而是一组带版本、可传播、可撤销的凭证;数据出境也不是一句「已加密」,而是每条传输都要有机制。本节把同意凭证与出境传输门写成可跑内核,用 P 层 TypeScript 与 Python 参考实现逐字符对拍,并区分「版本落后需重新同意」与「撤销立即生效」。本节只给工程实现,法律结论请咨询律师。
COPPA(美国,13 岁以下)与儿童专区上架,落到工程里就是一张「年龄 + 平台 → 能力」的矩阵。本节把个性化广告、行为追踪、社交、内购等八项能力做成可跑的能力解析内核,用 P 层 TypeScript 与 Python 参考实现逐字符对拍,并断言 kids 模式必须封禁个性化广告与行为追踪。本节只给工程实现,法律结论请咨询律师。
GDPR 与 CCPA 落到代码里,本质是三张表:数据流清单、字段级标记、主体权利请求的动作规划。本节把访问、可携带、删除三类请求写成可跑的 DSAR 规划内核,用 P 层 TypeScript 与 Python 参考实现逐字符对拍,删除权尊重法律义务与法律保全。本节只给工程实现,法律结论请咨询律师。
本地化要花多少钱、要排多久?本节把「按字数翻译 + 按小时审校 + 按键重排」三种计价方式折算成一个可复算的整数模型——每种语言的成本、工期,以及整个项目的总额与关键路径,全部由一份 config 驱动。S 层 Python 仿真把结果落成 JSON、CSV 与一张堆叠条形图,让「多做一个语种要加多少」变成一个能算出来的数。
译文交付之后,怎么判它合不合格?本节把多语言上线前该做的检查整理成一份可机读清单——键完整、占位符对齐、长度达标、术语一致、文化无禁忌、母语签署——再把「语言 × 检查 × 结论」矩阵折算成阻断/复核/放行三档闸门,用 D 层脚本与 P 层 TypeScript 内核跨语言对拍,证明判定逐位一致。
译文还没到位,怎么提前知道哪国文案会撑破按钮?伪本地化把源串机械改造成「假的外语」——拉丁字母换成带变音符的形态,再用加长括号标记包起来。本节用一份 TypeScript 内核做这个改造与设计期估算,再内联进单文件 HTML,在无头浏览器里真实测量源串与伪本地化串谁撑破容器,并用 Playwright 断言。
翻译对了不等于读得对:07/04/2026 在美国是 7 月 4 日、在英国是 4 月 7 日,1,234.56 在德国要写成 1.234,56。本节把日期、数字分组、货币符号与 RTL 方向整理成一张可机读的 locale 表,用 P 层 TypeScript 内核以全整数(最小单位 + 千分比汇率、地板除、无浮点)复算,并与 Python 参考实现逐字符对拍。
美术变体是出海最容易被漏算的成本项:它不随语言打包,而随市场走,且套数不是线性的。本节把「哪些素材在哪些市场需要专属变体」做成一张可算的表,用 S 层仿真按 DAU 占比逐市场纳入,画出「覆盖 ↔ 成本」曲线并定位性价比拐点,让「全做」和「只做前几个市场」在同一张表上对账。
文化禁忌不是翻译问题,是发行问题。本节把各地区的符号、手势、颜色、数字、动物与措辞禁忌整理成一份可机读规则表,用 D 层脚本把「素材语义标签 × 地区规则」扫成命中矩阵,算出阻断/警告/提示三档与可发行地区,再用 P 层 TypeScript 内核跨语言对拍,证明判定逐位一致。
同一句「确认」,中文两个字、德语十个字母、俄语更长。文案膨胀是出海 UI 最容易翻车的地方:按钮撑破、标签换行、数字溢出。这一节用一份 TypeScript 内核做设计期估算,再把它内联进单文件 HTML,在无头浏览器里真实测量哪国文案撑破容器,并用 Playwright 断言结果。
键设计好了,运行时还得决定「加载哪些包、缺了怎么回退、总共多少字节」。这一节把语言包拆成 core 与 content 两个包,用回退链解析每个键,算出一款游戏在某个语言下真正要加载的字节数;并用 Python 仿真与 TypeScript 内核跨语言逐位对拍。
多语言资源管线的第一件事,是把文案从代码里抽出来、收敛成一套稳定的键。这一节讲 i18n 资源的三种结构、键的命名规则,并用一份 TypeScript 内核把嵌套资源拍平成点分键、校验非法键名、统计各语言对基准键集合的覆盖率与缺翻译,配可跑的单测与真实输出。
海外 H5 平台的广告形态与移动小游戏并不相同:广告由平台以覆盖层注入,形态分商业中断、激励、横幅、前贴片,频控与日上限掌握在平台侧。本节把各平台公开 SDK 的能力整理成一份可路由的档案,并配可跑的 TypeScript 内核判定「此刻能不能弹」。
多平台发行最怕的不是某个平台崩,而是「你以为四个平台跑的是同一版,其实不是」。本节把每个平台的源码版本、配置摘要、内容摘要合成构建指纹,找多数共识、标出离群平台,再按错误率阈值判回滚、重推还是继续;配 Python 仿真与 TypeScript 内核跨语言对拍。
同一份代码要产出微信、抖音、Poki、CrazyGames 四套包,还要区分发布版与调试版、轻量与全量资源。本节把「渠道 × 变体 × 资源档」展开成一张确定性构建矩阵,算每个产物的大小与预算、标出超限项,并给出可复现的产物清单哈希,配 Python 仿真与 TypeScript 内核跨语言对拍。
一份代码要同时上微信、抖音、Poki、CrazyGames,差异不该散落在 if-else 里。本节用一层 Host 抽象接口加一份渠道配置,把能力位、激励倍数、插屏节流、离线上限全部收敛成可解析的整数配置,配 Python 仿真与 TypeScript 内核跨语言对拍。