trinitycore authserver

authserver 是trinitycore的登陸驗證服務器,這是authserver的作用.


從authserver的main()函數入手:

這個入口函數中代碼從上到下,展示了authserver的業務流程,但是最重要也是最核心的也就兩處,其他都是旁枝末節的,比如加載配置。如果是要高效的學習這個服務器,那麼這些旁枝末節的部分就不要花時間去看,因爲,收益真的不高。那麼,我們就把重點放在這核心的兩處。


第一處:

  if(!StartDB())

      return 1;

 這一處體現的是trinitycore的數據庫模塊,框架結構在前文:http://blog.csdn.net/qq51931373/article/details/52223167


第二處:

 sAuthSocketMgr.StartNetwork(_ioService, bindIp, port);

這一處的作用是初始化網絡模塊,並且開始接受客戶端的連接,接受信息並處理信息

sAuthSocketMgr準確的描述是:authserver的網絡引擎。再說明白點就是:創建監聽socket,在監聽socket上異步監聽外部連接,接收外部的網絡信息,並且處理消息,然後還管理服務器和所有客戶端的連接對象socket,也就是說,authserver服務器上最核心的事情都是他乾的。

AuthSocketMgr幹了這麼多核心的業務,它是如何做到的呢?這要從它的繼承體系 和 成員變量的作用這個角度來分析:


1. 繼承體系

AuthSocketMgr繼承自模板父類:

class AuthSocketMgr:public SocketMgr<AuthSession>

{
}

trinitycore的作者爲什麼要設計這麼一個模板作爲父類?原因是作爲服務器來說,不管是驗證服務器authserver,還是網關服務器gateserver,還是遊戲邏輯服務器worldserver,他們都在內部處理着行爲類似(建立監聽,接收信息,處理信息等),但是類型卻不同(authserver,gateserver,worldserver)的業務。既然是操作相同但是操作的類型不同,那麼,當然是用模板,STL就是這樣啊,vector<>可以存儲很多不同的類型,但是操作都是一樣的,都有push_back().

上面代碼中的模板參數:AuthSession在AuthServer中是個很重要的對象。


未完待續...




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章