Skip to content

MMO 组件装配目录

这篇文档把 Apollo 的 Profile 收敛到组件装配层。

它不重新讲理想架构,而是回答:

Tower Defense Compact、Standard MMO、Distributed MMO 分别应该装哪些组件,这些组件落在哪些模块或 App,哪些组件当前必须后置。

一、阅读方式

这份目录按四类状态标记组件:

状态含义
必选该 Profile 的最小闭环必须启用
可选按项目需要启用,不影响 Profile 基线
后置当前不应先做,等主链稳定后再做
关闭该 Profile 默认不启用,避免复杂度污染

组件不是进程。

同一个组件可以装进不同进程,但它的状态权威归属必须保持一致。

二、总装配矩阵

组件推荐落点CompactStandard MMODistributed MMO边界说明
ApplicationHostmodules/runtime必选必选必选所有 App 统一宿主
Runtime Opsmodules/runtime/ops必选必选必选console、watcher、diagnostics
Protocol Envelopemodules/net / modules/protocol必选必选必选客户端协议和内部信封分离
LoginAppapps/login-app可选必选必选认证、风控、票据,不持有长期在线权威
GatewayAppapps/gateway-app必选必选可选默认公网接入;Proxy-hosted 模式可弱化
CompactGameServer未来 apps/compact-game-appapps/game-server必选关闭关闭固定地图、塔防、局内玩法
SceneInstancemodules/game/world 或 compact domain必选可选可选Compact 的主运行单元
WaveRuntimemodules/game domain必选可选可选塔防波次驱动,不能变成 L9 能力
BattleRuntimemodules/game/battle必选必选必选规则结算,热路径不强制走远程调用
PlayerAnchormodules/game/session可选必选必选玩家长期在线主状态
AnchorManagermodules/game/session可选必选必选创建、替换、销毁锚点
SessionLocatormodules/game/session可选必选必选session/player 归属定位
WorldAssignmentmodules/game/session可选必选必选当前 world / instance / zone 归属
WorldHostmodules/runtime + modules/game/world关闭必选必选普通 MMO 世界宿主
MapInstancemodules/game/world可选必选必选地图和副本运行实例
WorldSessionmodules/game/world可选必选必选玩家在世界内的运行上下文
AOI / Interestmodules/game/world必选必选必选Compact 内嵌,Standard 本地,Distributed 跨 partition
ReplicationPipelinemodules/game/core / modules/game/world必选必选必选复制入口必须统一
Repositorymodules/data 或未来 modules/platform必选必选必选业务不直接依赖裸 SQL/Redis
PersistenceServiceapps/base-app 过渡或未来 persistence-app必选必选必选持久化执行层,不是在线主状态
ScriptRuntime未来 modules/script可选可选可选承接业务钩子,不承接高频热路径
MatchCoordinator未来 match domain可选可选可选对局编排,不替代 MMO world 主链
ProxyBaseApp 增强组件关闭后置必选Distributed 模式客户端代理能力
WitnessL9 distributed extension关闭后置必选客户端可见世界上下文
GhostReplicaL9 distributed extension关闭后置必选非权威实体投影
AuthorityTransferL9 distributed extension关闭后置必选跨 partition 权威迁移
SpacePartitionL9 distributed extension关闭后置必选连续大世界空间切片
AppMgr控制面增强关闭后置必选负载、拓扑、迁移控制

三、Tower Defense Compact 装配包

必选组件

  • ApplicationHost
  • Runtime Ops
  • Protocol Envelope
  • GatewayApp
  • CompactGameServer
  • SceneInstance
  • WaveRuntime
  • BattleRuntime
  • AOI / Visibility
  • SceneSnapshot
  • Repository
  • PersistenceService

可选组件

  • LoginApp
  • 轻量 PlayerAnchor
  • MatchCoordinator
  • ScriptRuntime
  • Chat / Social
  • Leaderboard

默认关闭

  • Proxy
  • Witness
  • GhostReplica
  • AuthorityTransfer
  • SpacePartition
  • CellAppMgr

最小验收链路

text
Client
  -> GatewayApp
  -> CompactGameServer
  -> enter SceneInstance
  -> spawn wave
  -> build tower / cast skill
  -> battle tick
  -> state replication
  -> snapshot / reconnect
  -> persistence

验收重点:

  • 每个 SceneInstance 有独立 tick 和快照。
  • 波次、建造、技能、怪物路径在同一局内闭环。
  • GatewayApp 不保存完整局内权威。
  • 需要断线恢复时,恢复入口由 SceneSnapshot 和轻量在线状态共同完成。

四、Standard MMO 装配包

必选组件

  • ApplicationHost
  • Runtime Ops
  • Protocol Envelope
  • LoginApp
  • GatewayApp
  • PlayerAnchor
  • AnchorManager
  • SessionLocator
  • WorldAssignment
  • WorldHost
  • MapInstance
  • WorldSession
  • AOI / Interest
  • ReplicationPipeline
  • Repository
  • PersistenceService

可选组件

  • BattleRuntime
  • ScriptRuntime
  • Chat / Social
  • Task / Activity
  • MatchCoordinator
  • Leaderboard

默认关闭

  • Proxy
  • Witness
  • GhostReplica
  • AuthorityTransfer
  • SpacePartition
  • CellAppMgr

最小验收链路

text
Client
  -> LoginApp
  -> GatewayApp
  -> BaseApp(PlayerAnchor)
  -> WorldApp(WorldHost)
  -> enter MapInstance
  -> AOI / movement / replication
  -> reconnect
  -> persistence

验收重点:

  • BaseApp 是唯一在线主状态中心。
  • GatewayApp 只持有连接态和短期路由快照。
  • WorldApp 只持有世界运行态,不持有玩家长期归属真相。
  • PersistenceService 是支撑层,不反向成为 BaseApp 的语义中心。

五、Distributed MMO 装配包

前置条件

必须先满足 Standard MMO 的最小验收链路。

如果下面能力还不稳定,不进入 Distributed MMO:

  • 登录票据
  • 玩家锚点
  • 世界进入
  • 切图 / 切实例
  • 断线重连
  • 持久化边界
  • 复制管线
  • 运行时观测

追加组件

  • Proxy
  • ClientAttachment
  • Witness
  • GhostReplica
  • AuthorityTransfer
  • SpacePartition
  • CellRuntime
  • AppMgr
  • TopologyRegistry
  • MigrationControl

最小验收链路

text
Client
  -> LoginApp
  -> GatewayApp or BaseApp Proxy
  -> BaseApp(PlayerAnchor + optional Proxy)
  -> CellApp / Partition
  -> Witness visible set
  -> Ghost replication
  -> authority transfer
  -> persistence

验收重点:

  • 客户端附着点和空间权威分离。
  • real entity 和 ghost replica 关系明确。
  • authority transfer 有 prepare、commit、rollback。
  • AppMgr 是控制面,不承接业务主状态。

六、当前代码落点

能力当前推荐目录近期动作
应用宿主modules/runtime继续收口 ApplicationHost / WorldHost
运行时治理modules/runtime/ops补 watcher、console、diagnostics
在线主状态modules/game/session稳定 PlayerAnchor / AnchorManager / SessionLocator
世界运行时modules/game/world稳定 MapInstance / WorldSession / AOI
登录入口apps/login-app收口为认证、风控、票据、入口分配
公网接入apps/gateway-app收口为连接、admission、dispatch、egress
玩家锚点宿主apps/base-app从数据服务原型转向 PlayerAnchor Host
世界宿主壳apps/cell-app过渡期按 WorldHost 装配壳推进
持久化modules/data / 未来 persistence-app先抽象 Repository,再决定是否独立进程
Compact 壳apps/game-server 或未来 apps/compact-game-app可作为塔防/固定地图最小闭环候选
大世界增强modules/bigworld / 未来 L9 目录后置,不污染 Standard MMO

七、装配优先级

R0:公共运行底座

先做:

  • ApplicationHost
  • 配置和 profile
  • 日志初始化
  • shutdown hook
  • watcher / diagnostics
  • protocol envelope

S1:Standard MMO 主链

先做:

  • LoginApp
  • GatewayApp
  • PlayerAnchor
  • WorldAssignment
  • WorldHost
  • WorldSession
  • Repository

C1:Compact 最小闭环

如果项目目标是塔防或固定地图,可以与 S1 并行推进:

  • CompactGameServer
  • SceneInstance
  • WaveRuntime
  • BattleRuntime
  • SceneSnapshot

D1:Distributed MMO 增强

只在 S1 稳定后做:

  • Proxy
  • Witness
  • GhostReplica
  • AuthorityTransfer
  • SpacePartition
  • AppMgr

八、验收矩阵

Profile第一验收目标不通过的典型表现
Compact玩家进入固定场景并完成一轮波次同步场景状态只能存在 gateway;断线恢复找不到局内快照
Standard MMO玩家登录后经 Gateway 进入 World,并可重连恢复BaseApp 仍只是 DB 服务;WorldApp 持有长期玩家归属
Distributed MMO玩家跨 partition 迁移不丢权威和可见集Ghost / Witness 与真实实体关系不清;AppMgr 侵入业务状态

九、设计边界

组件装配必须遵守下面边界:

  • PlayerAnchor 不依赖具体 WorldApp 实现。
  • WorldSession 不等于公网连接。
  • Repository 不知道玩家在线路由。
  • GatewayApp 不直接修改玩家长期归属。
  • CompactGameServer 可以复用 AOI / Battle / Replication,但不启用 L9。
  • Distributed MMO 可以替换客户端接入形态,但不能绕过在线主状态。

十、结论

Apollo 后续不应再按“模块名补齐”推进,而应按 Profile 装配包推进。

近期最重要的两件事是:

  • Standard MMOLogin -> Gateway -> BaseApp(PlayerAnchor) -> WorldHost 主链做稳。
  • Tower Defense CompactGateway -> CompactGameServer -> SceneInstance 最小闭环做清楚。

Witness / Ghost / AuthorityTransfer / AppMgr 全部后置,避免在基础在线主链未稳定前引入分布式世界复杂度。

相关阅读

基于 MIT 许可发布