Skip to content

feat(network): Stage-5c+5d 跨服玩家路由 + player_route + SessionManager 钩子 #484

Description

@AlianBlank

背景

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) + 默认 Drop
  • SessionManager.SetPlayerRouteOnline 追加控制库 upsert 钩子(version+1)
  • SessionManager.SetPlayerRouteOffline 追加控制库删除钩子
  • ForwardToRemoteServerAsync 实现:ResolveAsync 两跳 + RemoteMessaging + 目标服本地复投
  • RetrySemantics 指数退避 + per-instance 单飞 dedupe
  • PlayerRouteStaleException 类型
  • 双进程跨服消息 CI 用例:A→B 在线投递 / 离线策略 / 顶号覆盖 / 实例死亡切流重投
  • dotnet test 全绿 + CI gate 绿

验收

  • AC-4b 跨服玩家路由:双进程拓扑下 A→B 成功投递(ResolveAsync 两跳 + 目标服本地复投);B 离线走 PlayerOfflineStrategy;顶号 version+1 覆盖无旧服残留;目标实例死亡按 RetrySemantics 切流重投。单进程形态快路径永远命中。

依赖

  • 依赖:C143d(MongoEndpointRegistry/Watcher + 双视图路由表)
  • 阻塞:无(依赖链终点)

标签约定

P1 project:gameframex.server.source blocked-by-dependency

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions