Skip to content

feat(startup): Stage-1+2 AppBootstrapper + 多 Role 启动 + 逆序停机 #481

Description

@AlianBlank

背景

C143 umbrella 的 Stage-1+2 落地。GameApp.Start 仅支持单 ServerType,AppEnter 仅支持单宿主;共享内核在每个 Role 启动类里重复初始化。本 issue 实现多 Role 启动 + AppBootstrapper 共享内核幂等守卫 + 逆序停机。

设计源:gfx-doc/dev/online-platform/process-topology-isomorphism-design-2026-09-21.md § D1 / D2 / D5 / D7 / D8。
Change 文件:gfx-doc/dev/startup/changes/C143b-process-topology-stage2-multirole-startup/change.md

范围

  • GameApp.Start 扩展:--ServerType=Game,Social 复数 + --AllInOne 开关。
  • RoleSet:本进程 Role 不可变快照。
  • AppBootstrapper:进程级共享内核幂等初始化(Interlocked.CompareExchange 守卫)。
  • AppEnter 扩展:宿主集合 + 逆序停机(按 StartUpTypeRegistry 优先级)。
  • StartupOptions 扩展:IsAllInOneServerTypes: string[](保留 IsSingleMode 不动)。

任务

  • AllInOneOptions 实现(CLI 解析:--ServerType 逗号 split + --AllInOne 开关)
  • RoleSet 不可变快照实现
  • AppBootstrapper 幂等守卫 + BootstrapperAlreadyInitializedException
  • GameApp.Start 扩展接受 AllInOneOptions;CLI 解析走 AllInOneOptions.Parse
  • AppEnter 扩展:宿主集合 + 逆序停机
  • AppStartUpBase 启动链改为调用 AppBootstrapper.EnsureInitialized()
  • 单 Role smoke test 对照基准(AC-3 兼容)
  • 多 Role 启动单元测试(Game+Social 单进程启动顺序)
  • 优先级冲突扫描 + 冲突表输出
  • dotnet test 全绿

验收

  • AC-1 All-in-One:--AllInOne 单进程拉起全部已注册 Role;可在 IDE 断点调试整组服务器。
  • AC-3 现状兼容:现有单 Role 启动命令行为零变化;StartupOptions.IsSingleMode 不变。
  • D5 共享内核幂等:进程级共享内核仅初始化一次;二次初始化抛明确异常而非静默覆盖。

依赖

  • 依赖:C143a(CurrentSetting + GameDb 多库 + LogType 固定标识)
  • 阻塞:C143c

标签约定

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