遊戲伺服器分析

zhumeilu發表於2017-12-14

ServerServiceManager服務啟動管理器,單例,包含一個Map<String serviceId,IService> 方法:註冊服務,獲取服務,移除服務

GlobalManager 各種全域性的業務管理器、公共服務例項的持有者,負責各種管理器的初始化和例項的獲取

LocalNetService 本地網路服務

GameServer server = new GameServer();

       super(ServerServiceManager.SERVICE_ID_ROOT);
       this.globalManager = new GlobalManager();
       this.localNetService = new LocalNetService();

server.startServer();
    輸出日誌:伺服器啟動中
    init(configFile);
        initSpring();   初始化spring容器
        globalManager.init(configFile);
            //從spring中獲取localSpringBeanManager的例項,然後設定到LocalMananger裡面的localSpringBeanManager成員變數中。localSpringServiceManager,localSpringServicerAfterManager
            initLocalManger();
            //初始化本地服務// //初始化game-excutor更新服務
            initLocalService();

           //初始化訊息處理器
           //根據使用的協議的不同,初始化tcp和udp處理佇列    gameTcpMessageProcessor,GameUdpMessageOrderProcessor,並將其新增到LocalMananger中
           initNetMessageProcessor();
           //擴充套件使用(沒有內容)
           initGameManager();
    start();
          //根據更新器執行型別啟動更新服務updateService.start();
          globalManager.start();
          //首先初始化處理器initChannelInitializer();根據 GameServerConfig,建立GameNettyTcpServerService,GameNettyUdpServerService,GameNettyRPCService
          localNetService.startup();
          //建立伺服器啟動結束服務 並呼叫啟動startup方法,並且新增到了LocalManager中
          LocalMananger.getInstance().create(GamerServerStartFinishedService.class, GamerServerStartFinishedService.class);
           //註冊停服監聽器,用於執行資源的銷燬等停服時的處理工作
          addShutdownHook();
          //遊戲伺服器執行時資料,開啟服務
         GameServerRuntime.setOpenOn();


    輸出日誌:伺服器啟動成功,正在執行
複製程式碼

相關文章