Unity之服務(wù)器skynet(三)-----Skynet啟動(dòng)流程

  1. skynet 節(jié)點(diǎn)通過運(yùn)行 skynet 主程序啟動(dòng),必須在啟動(dòng)命令行傳入一個(gè) Config 文件名作為啟動(dòng)參數(shù)。skynet 會(huì)讀取這個(gè) config 文件獲得啟動(dòng)需要的參數(shù)。

  2. 第一個(gè)啟動(dòng)的服務(wù)是 logger ,它負(fù)責(zé)記錄之后的服務(wù)中的 log 輸出。logger 是一個(gè)簡(jiǎn)單的 C 服務(wù),skynet_error 這個(gè) C API 會(huì)把字符串發(fā)送給它。在 config 文件中,logger 配置項(xiàng)可以配置 log 輸出的文件名,默認(rèn)是 nil ,表示輸出到標(biāo)準(zhǔn)輸出。

  3. bootstrap 這個(gè)配置項(xiàng)關(guān)系著 skynet 運(yùn)行的第二個(gè)服務(wù)。通常通過這個(gè)服務(wù)把整個(gè)系統(tǒng)啟動(dòng)起來。默認(rèn)的 bootstrap 配置項(xiàng)為 "snlua bootstrap" ,這意味著,skynet 會(huì)啟動(dòng) snlua 這個(gè)服務(wù),并將 bootstrap 作為參數(shù)傳給它。snlua 是 lua 沙盒服務(wù),bootstrap 會(huì)根據(jù)配置的 luaservice 匹配到最終的 lua 腳本。如果按默認(rèn)配置,這個(gè)腳本應(yīng)該是 service/bootstrap.lua (默認(rèn)不要改)。
    注意:

  • 這段腳本通常會(huì)根據(jù) standalone 配置項(xiàng)判斷你啟動(dòng)的是一個(gè) master 節(jié)點(diǎn)還是 slave 節(jié)點(diǎn)。如果是 master 節(jié)點(diǎn)還會(huì)進(jìn)一步的通過 harbor 是否配置為 0 來判斷你是否啟動(dòng)的是一個(gè)單節(jié)點(diǎn) skynet 網(wǎng)絡(luò)。
  • 單節(jié)點(diǎn)模式下,是不需要通過內(nèi)置的 harbor 機(jī)制做節(jié)點(diǎn)中通訊的。但為了兼容(因?yàn)槟氵€是有可能注冊(cè)全局名字),需要啟動(dòng)一個(gè)叫做 cdummy 的服務(wù),它負(fù)責(zé)攔截對(duì)外廣播的全局名字變更。如果是多節(jié)點(diǎn)模式,對(duì)于 master 節(jié)點(diǎn),需要啟動(dòng) cmaster 服務(wù)作節(jié)點(diǎn)調(diào)度用。
  • 此外,每個(gè)節(jié)點(diǎn)(包括 master 節(jié)點(diǎn)自己)都需要啟動(dòng) cslave 服務(wù),用于節(jié)點(diǎn)間的消息轉(zhuǎn)發(fā),以及同步全局名字。接下來在 master 節(jié)點(diǎn)上,還需要啟動(dòng) DataCenter 服務(wù)。
  • 然后,啟動(dòng)用于 UniqueService 管理的 service_mgr 。
  1. 最后,它從 config 中讀取 start 這個(gè)配置項(xiàng),作為用戶定義的服務(wù)啟動(dòng)入口腳本運(yùn)行。成功后,把自己退出。這個(gè) start 配置項(xiàng),才是用戶定義的啟動(dòng)腳本,默認(rèn)值為 "main" 。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容