364 字
2 分钟
124 行开一个服:OpenRA 的专用服务器与联机同步

小而美的入口#

OpenRA.Server/Program.cs 一共 124 行:解析参数、起端口、进主循环。开服就是:

Terminal window
./launch-dedicated.sh

玩家连进来选图、选阵营、倒计时、开打。没有大厅 microservice,没有 K8s,就是一个进程——RTS 专用服的典范:够用即最好

只同步指令,不同步状态#

RTS 一局几千个单位,逐帧同步状态能把带宽打爆。OpenRA 用经典方案:所有客户端跑完全相同的确定性模拟,网络只传玩家指令(“3 号坦克去 (56,78)”)。

这要求极严的确定性:随机数种子同步、浮点行为一致、遍历顺序固定。之前聊寻路时说的定点数,根子就在这里—— physics 稍微一飘,8 个客户端就打出 8 种结局,也就是联机玩家最恨的“同步错误”。

ServerTraits:服务器也有 Trait#

OpenRA.Mods.Common/ServerTraits/ 表明连服务器行为都是可组合的:大厅管理、观战、录像,各 Mod 按需挂载。Trait 思想从 gameplay 一直贯穿到联机层,前后一致的设计语言,读代码特别顺。

我的收获#

  • 联机方案选型看品类:RTS 用指令同步 + 确定性模拟,FPS 用状态同步 + 预测回滚,没有银弹
  • 专用服保持小而专:一个进程做好一件事,比大而全好运维
  • 确定性是 feature:从随机数到容器遍历顺序,都要为“多端一致”让路