GateApp啟動流程---rimServer初始化

介紹一下GateApp的啟動流程花盐,其實別的進程啟動流程也是類似

rimServer.init

首先找到main函數(shù)


image.png
image.png

轉(zhuǎn)到run_main看看內(nèi)容
挑重點講:


image.png

第一個紅框里聲明了rimServer對象
然后第二個紅框給紅框設定配置文件蒿褂,以及跨服文件
最后一個紅框?qū)@個rimServer對象進行初始化

接下來先看看這個rimServer到底是什么東西

進入到engine源碼部分:


image.png

直接看這個類的定義


image.png

查看init函數(shù)都做了一些什么事情


image.png

直接定位到函數(shù)實現(xiàn)
第一個#if 說明了 如果是在linux環(huán)境下,在不指定USED_ACE_TRB_PROACTOR的情況下需要執(zhí)行的代碼段卒暂,所以這一段內(nèi)容可以暫時忽略掉
一步一步看執(zhí)行的函數(shù):

    CTinyXml::initialize();  
image.png

這里不展開說明啄栓,實際上是tinyXml的初始化,tinyxml 生成或解析XML非常好用

    CProactor::instance();

在Windows下使用的是Proactor事件模型也祠,進去看看有什么內(nèi)容


image.png

這個Proactor對象保存了一個單例_instance 如果為NULL 那么new一個CProactor昙楚,然后返回這個Proactor對象,看看構造函數(shù)的內(nèi)容:


image.png

上面的代碼顯示這個成員被初始化了诈嘿,且這個初始化的類名為CACEProactorImpl堪旧,這個Proactor類有兩個成員:
image.png

上面圖片看看IProactorImpl是什么:


image.png

其實是一個抽象的接口類削葱。那么可以猜到CACEProactorImpl可能是繼承了這個接口類。再看看CACEProactorImpl類的聲明:
image.png

果不其然淳梦,這個接口繼承了IProactorImpl析砸,并且自己寫了父類的虛函數(shù)方法”郏看看這個類的構造函數(shù)都干了一些什么:
image.png

看來在windows平臺下首繁,啥也沒做,只是在linux平臺下初始化了邏輯陨囊。先不去管他弦疮,暫時只看windows平臺下的處理

回到最初


image.png

對Proactor的兩個成員變量_instance和變量_IProactorImpl進行一個初始化


image.png

設置日志的初始化
image.png

這段代碼首先,它定義了一個 CXml 類型的對象蜘醋。

接下來胁塞,它創(chuàng)建了一個 cdf::COptions 對象,并添加了幾個選項压语。這些選項的名稱分別為 "server-config"啸罢、"server-name"、"cell-channel"胎食、"copy-channel" 和 "times"伺糠。這些選項都需要一個參數(shù)(即選項名稱后需要提供一個參數(shù)值)。

然后斥季,程序調(diào)用 options.parse(argc, argv) 來解析命令行參數(shù)和選項训桶。這里的 argc 和 argv 是主函數(shù)的參數(shù),它們包含了程序啟動時傳遞給程序的所有命令行參數(shù)和選項酣倾。

接下來舵揭,程序檢查是否設置了 "server-config" 選項。如果設置了躁锡,程序?qū)⑹褂?xml.loadFile 方法加載 options.optArg("server-config").c_str() 所指定的 XML 文件午绳。否則,程序?qū)z查是否設置了 _configFile 變量映之,如果沒有設置拦焚,則程序?qū)⒓虞d默認的文件 "engine_config.xml"。否則杠输,程序?qū)⒓虞d _configFile 變量指定的文件赎败。解析命令行參數(shù)和選項,并根據(jù)指定的選項加載一個 XML 文件蠢甲。

加載完xml文件之后僵刮,讀取xml對應的配置,對rimServer的成員變量進行賦值


image.png

image.png

_mqThreads :指定線程數(shù)量,如果沒配置就默認為2個 先不去糾結這是啥搞糕,后續(xù)再看
_proactorThreads :同上勇吊,如果沒有配置,就默認為4個
_proactorWaitTime:類似一個等待時間的東西窍仰,沒設置就默認100
其中rimConfig是一個配置單例類


image.png
image.png

聲明了一些參數(shù)汉规,這里看個大概就行
xml的文件里也包含了這些值

接下來就是處理跨服文件


image.png

上述代碼根據(jù) _crossFile 變量指定的路徑加載一個名為 "crossdomain.xml" 的文件。

首先驹吮,程序定義了一個 std::ifstream 對象 ifs针史,這是一個用于從文件中讀取數(shù)據(jù)的輸入流對象。

接下來钥屈,程序檢查 _crossFile 變量是否為空。如果為空坝辫,程序?qū)⑹褂?CRMIConfig::instance()->getPath() 方法獲取路徑并添加文件名 "crossdomain.xml" 來打開文件篷就。否則,程序?qū)⑹褂?_crossFile 變量指定的路徑打開文件近忙。

然后宦赠,程序檢查是否成功打開了文件整胃。如果成功打開了文件,程序?qū)奈募凶x取最多 sizeof(buf) 個字節(jié)的數(shù)據(jù)到 buf 中。然后丘损,程序使用 std::string 構造函數(shù)將 buf 中的數(shù)據(jù)轉(zhuǎn)換為一個字符串對象,并將其傳遞給 CAs3Protocol::setCrossdomain 方法踏烙,該方法將字符串保存為一個靜態(tài)變量踢涌。最后,程序使用 CDF_LOG_TRACE 方法記錄日志攘残,將讀取到的字符串打印出來拙友。

總的來說,這段代碼的作用是根據(jù)指定的路徑加載一個名為 "crossdomain.xml" 的文件歼郭,并將其內(nèi)容保存為一個字符串對象遗契,以便其他部分的程序可以使用。同時病曾,程序還記錄了讀取到的內(nèi)容牍蜂。

其中CAs3Protocol::setCrossdomain 就是對這個類的成員進行賦值,暫時可以不需要知道是干嘛的


image.png
image.png
image.png

這段初始化的核心內(nèi)容應該就是這段代碼了

這段代碼的作用是根據(jù) CRMIConfig::instance()->isSingleThread() 的值來創(chuàng)建一個 cdf::CReactor 實例泰涂,用于事件驅(qū)動程序的反應器模型鲫竞。

如果 CRMIConfig::instance()->isSingleThread() 的值為真,則程序會使用 USED_ACE_PROACTOR 宏定義編譯時選擇的 proactor 庫逼蒙,創(chuàng)建一個 cdf::CAceTimerReactorImpl 實例作為反應器模型的實現(xiàn)贡茅,并將其包裝在 cdf::CReactor 對象中。在創(chuàng)建 cdf::CAceTimerReactorImpl 實例時,程序指定了一個超時等待時間 _proactorWaitTime顶考,一個指向 NULL 的回調(diào)函數(shù)指針和一個消息隊列 cde::CBigMessageQueue::instance()赁还。

否則,如果 CRMIConfig::instance()->isSingleThread() 的值為假驹沿,則程序會創(chuàng)建一個不帶參數(shù)的 cdf::CTimerReactorImpl 實例作為反應器模型的實現(xiàn)艘策,并將其包裝在 cdf::CReactor 對象中。

總的來說渊季,這段代碼的作用是創(chuàng)建一個事件驅(qū)動的反應器模型朋蔫,并選擇合適的反應器實現(xiàn)。這個反應器模型用于處理程序中的異步事件却汉,例如網(wǎng)絡 I/O 和定時器超時等驯妄。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市合砂,隨后出現(xiàn)的幾起案子青扔,更是在濱河造成了極大的恐慌,老刑警劉巖翩伪,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件微猖,死亡現(xiàn)場離奇詭異,居然都是意外死亡缘屹,警方通過查閱死者的電腦和手機凛剥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來轻姿,“玉大人犁珠,你說我怎么就攤上這事』チ粒” “怎么了盲憎?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長胳挎。 經(jīng)常有香客問我饼疙,道長,這世上最難降的妖魔是什么慕爬? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任窑眯,我火速辦了婚禮,結果婚禮上医窿,老公的妹妹穿的比我還像新娘磅甩。我一直安慰自己,他們只是感情好姥卢,可當我...
    茶點故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布卷要。 她就那樣靜靜地躺著渣聚,像睡著了一般。 火紅的嫁衣襯著肌膚如雪僧叉。 梳的紋絲不亂的頭發(fā)上奕枝,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天,我揣著相機與錄音瓶堕,去河邊找鬼隘道。 笑死,一個胖子當著我的面吹牛郎笆,可吹牛的內(nèi)容都是我干的谭梗。 我是一名探鬼主播,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼宛蚓,長吁一口氣:“原來是場噩夢啊……” “哼激捏!你這毒婦竟也來了?” 一聲冷哼從身側響起凄吏,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤远舅,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后竞思,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體表谊,經(jīng)...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡钞护,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年盖喷,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片难咕。...
    茶點故事閱讀 39,769評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡课梳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出余佃,到底是詐尸還是另有隱情暮刃,我是刑警寧澤,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布爆土,位于F島的核電站椭懊,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏步势。R本人自食惡果不足惜氧猬,卻給世界環(huán)境...
    茶點故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望坏瘩。 院中可真熱鬧盅抚,春花似錦、人聲如沸倔矾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至丰包,卻和暖如春禁熏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背烫沙。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工匹层, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人锌蓄。 一個月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓升筏,卻偏偏與公主長得像,于是被迫代替她去往敵國和親瘸爽。 傳聞我的和親對象是個殘疾皇子您访,可洞房花燭夜當晚...
    茶點故事閱讀 44,678評論 2 354

推薦閱讀更多精彩內(nèi)容