skynet 節點通過運行 skynet 主程序啟動,必須在啟動命令行傳入一個 Config 文件名作為啟動參數。skynet 會讀取這個 config 文件獲得啟動需要的參數。
第一個啟動的服務是 logger ,它負責記錄之后的服務中的 log 輸出。logger 是一個簡單的 C 服務,
skynet_error
這個 C API 會把字符串發送給它。在 config 文件中,logger 配置項可以配置 log 輸出的文件名,默認是 nil ,表示輸出到標準輸出。bootstrap 這個配置項關系著 skynet 運行的第二個服務。通常通過這個服務把整個系統啟動起來。默認的 bootstrap 配置項為 "snlua bootstrap" ,這意味著,skynet 會啟動 snlua 這個服務,并將 bootstrap 作為參數傳給它。snlua 是 lua 沙盒服務,bootstrap 會根據配置的 luaservice 匹配到最終的 lua 腳本。如果按默認配置,這個腳本應該是 service/bootstrap.lua (默認不要改)。
注意:
- 這段腳本通常會根據 standalone 配置項判斷你啟動的是一個 master 節點還是 slave 節點。如果是 master 節點還會進一步的通過 harbor 是否配置為 0 來判斷你是否啟動的是一個單節點 skynet 網絡。
- 單節點模式下,是不需要通過內置的 harbor 機制做節點中通訊的。但為了兼容(因為你還是有可能注冊全局名字),需要啟動一個叫做 cdummy 的服務,它負責攔截對外廣播的全局名字變更。如果是多節點模式,對于 master 節點,需要啟動 cmaster 服務作節點調度用。
- 此外,每個節點(包括 master 節點自己)都需要啟動 cslave 服務,用于節點間的消息轉發,以及同步全局名字。接下來在 master 節點上,還需要啟動 DataCenter 服務。
- 然后,啟動用于 UniqueService 管理的 service_mgr 。
- 最后,它從 config 中讀取 start 這個配置項,作為用戶定義的服務啟動入口腳本運行。成功后,把自己退出。這個 start 配置項,才是用戶定義的啟動腳本,默認值為 "main" 。