背景
C143 umbrella 的 Stage-5c+5d 落地。跨服玩家路由(D21)—— 有状态玩家路由在多进程下保持一致:玩家 A 在 Game 服 #1 登录,要能给 Game 服 #2 的玩家 B 发消息;离线策略 + 顶号 version+1 + 实例死亡切流重投。
设计源:gfx-doc/dev/online-platform/process-topology-isomorphism-design-2026-09-21.md § D17 / D21。
Change 文件:gfx-doc/dev/startup/changes/C143e-process-topology-stage5d-cross-server-player-route/change.md。
范围
player_route 集合 schema + Mongo 索引(playerId 唯一 + TTL 30 天)。
MongoPlayerRouteResolver 实现既有 IPlayerRouteResolver(三级查找:本地快路径 → 控制库 → 离线)。
SessionManager.SetPlayerRouteOnline/Offline 追加控制库 upsert 钩子(version+1 防过期)。
ForwardToRemoteServerAsync 两跳投递(playerId → instanceId → advertiseEndpoint)+ 目标服本地复投。
PlayerOfflineStrategy 注入点(默认 Drop)。
任务
验收
- AC-4b 跨服玩家路由:双进程拓扑下 A→B 成功投递(ResolveAsync 两跳 + 目标服本地复投);B 离线走
PlayerOfflineStrategy;顶号 version+1 覆盖无旧服残留;目标实例死亡按 RetrySemantics 切流重投。单进程形态快路径永远命中。
依赖
- 依赖:C143d(MongoEndpointRegistry/Watcher + 双视图路由表)
- 阻塞:无(依赖链终点)
标签约定
P1 project:gameframex.server.source blocked-by-dependency
背景
C143 umbrella 的 Stage-5c+5d 落地。跨服玩家路由(D21)—— 有状态玩家路由在多进程下保持一致:玩家 A 在 Game 服 #1 登录,要能给 Game 服 #2 的玩家 B 发消息;离线策略 + 顶号 version+1 + 实例死亡切流重投。
设计源:
gfx-doc/dev/online-platform/process-topology-isomorphism-design-2026-09-21.md§ D17 / D21。Change 文件:
gfx-doc/dev/startup/changes/C143e-process-topology-stage5d-cross-server-player-route/change.md。范围
player_route集合 schema + Mongo 索引(playerId 唯一 + TTL 30 天)。MongoPlayerRouteResolver实现既有IPlayerRouteResolver(三级查找:本地快路径 → 控制库 → 离线)。SessionManager.SetPlayerRouteOnline/Offline追加控制库 upsert 钩子(version+1 防过期)。ForwardToRemoteServerAsync两跳投递(playerId → instanceId → advertiseEndpoint)+ 目标服本地复投。PlayerOfflineStrategy注入点(默认Drop)。任务
player_route集合 schema + Mongo 索引MongoPlayerRouteResolver实现(三级查找 + 本地缓存 + 控制库 TTL 缓存)PlayerOfflineStrategy枚举(Drop/Buffer/ForwardToMail) + 默认DropSessionManager.SetPlayerRouteOnline追加控制库 upsert 钩子(version+1)SessionManager.SetPlayerRouteOffline追加控制库删除钩子ForwardToRemoteServerAsync实现:ResolveAsync 两跳 + RemoteMessaging + 目标服本地复投RetrySemantics指数退避 + per-instance 单飞 dedupePlayerRouteStaleException类型dotnet test全绿 + CI gate 绿验收
PlayerOfflineStrategy;顶号 version+1 覆盖无旧服残留;目标实例死亡按RetrySemantics切流重投。单进程形态快路径永远命中。依赖
标签约定
P1project:gameframex.server.sourceblocked-by-dependency