Standard MMO 任务清单
这篇文档把 Standard MMO 的实施计划继续下钻成任务清单。
目标主链:
Client -> LoginApp -> GatewayApp -> BaseApp(PlayerAnchor) -> WorldApp
一、阶段目标
最终要达成的不是“模块名补齐”,而是下面这条链路稳定可用:
- 玩家登录
LoginApp发放短期票据GatewayApp校验票据BaseApp激活PlayerAnchorWorldApp创建WorldSession- 玩家进入地图
- 断线后可重连恢复
二、任务清单
A. 运行时基础
- [ ] 收口应用启动流程,统一
ApplicationHost / ProcessHost - [ ] 收口配置装载与 profile 切换
- [ ] 收口日志初始化与 console 输出
- [ ] 收口 shutdown hook、pidfile、单实例保护
验收点:
login-app / gateway-app / base-app / world-app都能稳定启动和关闭
B. 协议与调用边界
- [ ] 固定客户端登录票据协议
- [ ] 固定心跳、重连、踢线消息
- [ ] 固定内部 service envelope
- [ ] 固定
Login -> Base -> Gateway -> World的调用接口
验收点:
- 不同进程不再各自定义重复消息结构
C. BaseApp 在线主状态
- [ ]
PlayerAnchor生命周期稳定 - [ ]
AnchorManager支持查找、替换、销毁 - [ ]
SessionLocator可通过playerId/sessionId找回归属 - [ ]
ReconnectPolicy支持踢旧接新、断线恢复窗口 - [ ]
WorldAssignment支持WorldApp / Instance / Zone
验收点:
BaseApp成为唯一在线主状态中心
D. LoginApp 收口
- [ ]
Authenticator稳定支持账号密码校验 - [ ]
LoginRiskController支持基础限流和失败计数 - [ ]
EntryAllocator支持选择GatewayApp - [ ]
LoginTicketIssuer发放短期票据 - [ ] 删除
LoginApp对长期 session 权威的承担
验收点:
- 登录成功后客户端拿到的是短期登录票据,而不是长期 session 权威
E. GatewayApp 收口
- [ ]
ClientIngressServer负责 accept / read / write - [ ]
ConnectionRegistry只管理连接态 - [ ]
SessionAdmission必须向BaseApp校验 - [ ]
PacketDispatcher做分类,不做长期权威裁决 - [ ]
RouteExecutor只执行短期路由快照 - [ ]
ClientEgress收口下行发送
验收点:
GatewayApp不再持有玩家长期在线主状态
F. WorldApp 收口
- [ ]
WorldHost负责地图宿主 - [ ]
WorldSession负责玩家在世界中的运行态 - [ ]
MapInstance支持基础地图/副本 - [ ]
AOI支持可见集更新 - [ ]
Movement支持移动与广播
验收点:
- 玩家进入地图后可看到其他实体并完成基础移动同步
G. 持久化收口
- [ ]
Repository抽象固定 - [ ]
PersistenceService独立为支撑层 - [ ]
BaseApp只保留持久化协调 - [ ] 玩家快照支持加载、保存、下线刷盘
验收点:
BaseApp != DBMgr
H. 重连恢复链
- [ ]
GatewayApp检测断线后只上报BaseApp - [ ]
BaseApp决定进入 reconnect window 还是下线 - [ ]
WorldApp在窗口期保留最小运行态 - [ ] 重连成功后恢复
GatewayBinding + WorldSession
验收点:
- 断线后在窗口期内能恢复在线状态
三、建议顺序
推荐按下面顺序推进:
- 运行时基础
- 协议与调用边界
- BaseApp 在线主状态
- LoginApp 收口
- GatewayApp 收口
- WorldApp 收口
- 持久化收口
- 重连恢复链
四、里程碑
M1
- 可以稳定启动四个核心进程
M2
- 登录成功后可激活
PlayerAnchor
M3
- 玩家可通过
GatewayApp进入WorldApp
M4
- 断线重连链路跑通
M5
- 持久化从
BaseApp语义中心分离
五、结论
Standard MMO 是 Apollo 的第一落地点。
只要这条链路没有稳定,就不应进入:
ProxyWitnessGhostAuthorityTransfer
