这里是全站文章的归档入口,下面是按时间倒序排列的全部文章。若想按主题浏览,请从首页的专题分类进入。
《游戏服务端架构·品类、状态与拓扑》10.1 无缝世界的分片与边界
《长风原》开放世界原型把 6144×6144 的地图切成 64×64 区块,再把区块组分配给权威分片。本节讨论玩家可感知的无缝边界:哪些交互必须同片、哪些可以跨片,跨片移动如何用只读镜像掩盖接缝,越界传送为什么要在入口就拒绝,而不是让错误在分片之间扩散。
posts
这里是全站文章的归档入口,下面是按时间倒序排列的全部文章。若想按主题浏览,请从首页的专题分类进入。
《长风原》开放世界原型把 6144×6144 的地图切成 64×64 区块,再把区块组分配给权威分片。本节讨论玩家可感知的无缝边界:哪些交互必须同片、哪些可以跨片,跨片移动如何用只读镜像掩盖接缝,越界传送为什么要在入口就拒绝,而不是让错误在分片之间扩散。
以《泡泡工坊》春节活动为例,说明小游戏后端的最小组合为什么是单服务、单库、缓存与对象存储,以及什么时候才值得拆分;给出 Go 实现的版本化配置、令牌桶限流与上线前检查清单,覆盖配置发布、回滚、突发与补充、阻塞项与豁免测试,并列出可裁剪与不可裁剪能力清单。
以回合制卡牌为例,说明服务端权威洗牌种子、固定版本的随机数、确定性结算顺序与状态哈希如何共同支撑可验证回放;给出 Go 实现的 SplitMix64 洗牌、出牌状态机、SHA-256 状态指纹与回放校验,覆盖同种子复现、非法出牌、篡改动作与截断回放测试,并讨论断线重连与防客户端篡改的边界。
以《泡泡工坊》为例,说明休闲品类如何把大厅做成完全无状态、把房间做成带租约与 epoch 归属的有状态单元:大厅令牌只证明入场资格,房间租约决定谁能续约,过期回收把玩家送回大厅。给出可运行 Go 实现与令牌、心跳、加入、重入、过期五类测试,并讨论房间状态放内存还是 Redis 的判据。
退款不是把订单状态改成已退款,而是挂在原支付单上的一组退款单:整单退与部分退、审核中与退款中、金额分摊与到账时间都各有口径。本节用四种状态、可退额度与最大余数分摊,给出一个可测试的 TypeScript 退款模型,并说明端上展示与渠道到账时间的差异。
端上无法直接看渠道账单,只能把订单状态、支付单状态与渠道流水号三路信号按 orderId、payId、channelTxnId 对齐,再把差异分成漏单、重复、金额不符与状态不一致。本节给出一个纯函数分类器与带触发时机的待确认队列,并附真实测试输出。
整体留存 41%,看起来还行;拆开看,德语区 52%、日文区 38%、葡语区 27%,而葡语区的支持工单是平均值的两倍。出海复盘不能看总数,要按语言切队列,把访客、转化、客单价、留存、工单与维护成本放进同一张表,再决定加语言、维持还是回滚。
把「记账」直译成日文,商店页的曝光可能接近零,因为用户搜的是另一个词。商店页本地化要重做三件事:按当地搜索习惯重选关键词、把标题与副标题写成当地用户能懂的句子、让截图里的文字也换掉。翻译只解决读得懂,关键词才解决找得到。
同一个订阅,巴西用户看到 29 美元,转化 1.1%;换成本地货币并支持 Pix 之后升到 3.4%。按地区定价能救转化,但会带来套利、公平感与发票金额不一致三个新问题。三种定价做法、本地支付方式的取舍、差距控制在多少,这一篇把边界写清楚。
把时间一律存成 UTC 并不够:每天九点的提醒如果按 UTC 存,夏令时切换后就会变成八点或十点。时区、日期、数字与货币各有自己的坑——不存在与重复的本地时刻、每周从周几开始、日元没有小数位、电话号码不能存本地格式。这一篇给一套存储与显示的分离规则。
六种语言、十二个关键页、三个平台,组合起来是 216 种情况,一个人不可能每次发布都全测。可行的做法是剪枝:每语言五个页面、两个平台,加上伪本地化、缺 key 检测与截图回归三件工具。上线前真正要盯的不是「翻得对不对」,是漏译、回退与切换后不刷新。
路由必须回答两个问题:为什么选它,以及为什么没选它。本节把路由决策翻译成稳定代码的解释行与排序表,再给出按租户和按请求两种确定性灰度方式,用基点与哈希保证同一租户或同一请求的结果可复现,并说明灰度目标为何必须在候选内提升,以及解释如何用于故障复盘,附完整测试。
英文 Save 六个字符,德文 Speichern 要九个;短文案的膨胀比例最高可以翻倍。排版问题不是换个字体就能解决:按钮宽度要按最长语言预留,德语复合词要断词,中日文要处理禁则,阿拉伯文要镜像布局,CJK 字体还要做子集化,否则一个字体文件就能把首屏拖慢。
机翻直出每千字十几元,人工审校要一百多元,差价二十倍。但真正的成本不是翻译费,是翻错之后退款、差评与返工。把翻译分成四档质量阶梯,先用术语表锁住产品名与动词,再按比例抽检、按错误级别验收,才能用可控的钱买到够用的质量。
把字符串搬进 JSON 不算文案外置。真正的改造有三条硬规则:整句外置不拼片段、key 按语义命名、复数与性别交给 ICU 规则。拼接句、语序、复数形式是本地化返工的主要来源,先按这三条改,再谈翻译,能省掉一半的后期修补。
《群岛纪元》玩家离线三天回来,资源产出、维护消耗、仓库上限和运营补偿要在一次登录里算清;客户端时间不可信,时区与夏令时又会移动每日边界。本节把登录补算、定时结算与读时结算放进同一套幂等账本,给出包含封顶、补算窗口与补偿领取的 Go 实现和测试。
一次上线六种语言,通常等于六种都没做透。选市场应该先做排除法:支付收不收得到、合规承不承受得起、支持覆不覆盖得了,三条硬条件先砍掉一半候选;再用用户密度、支付客单、渠道、时区、合规、竞争六维打分,选一个市场做满十二周,而不是把预算摊成六份。
加一门语言不是翻译四万字就结束了:翻译与审校、工程改造、跨时区支持、合规与本地支付是四笔独立的成本,而之后每次改文案都要乘以语言数。用三个信号判断值不值得加,再把回本月数算出来,比「感觉该出海了」可靠得多。
9 元、19 元、29 元三个定价版本,转化率从 9% 掉到 3%,但每 1000 个访客带来的毛利从 1782 元涨到 6127 元。定价复盘不能只看转化率,也不能只看单月收入,要把价格、转化、留存、退款与支持成本放进同一张表,用毛利而不是流水做决定。
镜像能启动不等于能安全发布。本节用 libraryd 的真实启动失败、Flyway checksum 冲突和 /health 503 输出,讲清环境变量配置、只前进的迁移、扩展-收缩改造,以及灰度发布、回滚判据和连接池容量的具体计算方法等。