- 百萬在線:大型游戲服務端開發
- 羅培羽
- 823字
- 2021-09-17 17:04:55
2.2 理解Skynet
本節將帶領讀者理解Skynet的特有概念,然后進行實踐。
2.2.1 節點和服務
在圖2-7所示的服務端系統中,每個Skynet進程(操作系統進程)稱為一個節點,每個節點可以開啟數千個服務。如同1.4.1節中的程序,不同節點可以部署在不同的物理機上,提供分布式集群的能力。
2.1.2節的KV數據庫僅開啟了一個Skynet進程,它是單節點的服務端系統。
每個Skynet節點可以調度數千個Lua服務,讓它們并行工作。對應1.7節的內容可知,每個服務都是一個Actor。

圖2-7 開啟3個節點5個服務的服務端系統
知識拓展:Skynet的強項在于單個節點內的并行運算,對于分布式集群,它只提供一些基礎設施。對于1.4.4節提及的“分布式程序要處理很多異常情況”,在Skynet引擎中,這些異常情況依然要使用者自行處理。
2.2.2 配置文件
Skynet提供了很多配置項,可以打開KV數據庫范例(見2.1.2節)的配置文件examples/config查看它的內容。筆者整理了配置模板,見代碼2-1。到目前為止,讀者僅需關注thread和start這兩項,它們的含義見表2-1。
代碼2-1 配置模板,可以替換examples/config
(資源:Chapter2/1_config)
--必須配置 thread = 8 --啟用多少個工作線程 cpath = "./cservice/?.so" --用C編寫的服務模塊的位置 bootstrap = "snlua bootstrap" --(固定)啟動的第一個服務 --bootstrap配置項 start = "main" --主服務入口 harbor = 0 --(固定)不使用主從節點模式 --lua配置項(暫時固定) lualoader = "./lualib/loader.lua" luas ervice = "./service/?.lua;".."./test/?.lua;".."./examples/?.lua;".."./ test/?/init.lua" lua_path = "./lualib/?.lua;" .. "./lualib/?/init.lua" lua_cpath = "./luaclib/?.so" --后臺模式(必要時開啟) --daemon = "./skynet.pid" --logger = "./userlog"
表2-1 常見配置項說明

Skynet提供了很多功能,有些功能還提供多種實現方法,因此配置項較多。讀者可以打開https://github.com/cloudwu/skynet/wiki/Config查看詳細說明。
知識拓展:配置模板的各項說明見表2-2。
表2-2 配置模板的各項說明

2.2.3 目錄結構
Skynet的目錄結構如圖2-8所示,讀者(目前)只需關注表2-3中的幾項。

圖2-8 Skynet的目錄結構
表2-3 Skynet的目錄結構說明

Skynet提供了很高的靈活性,更改表2-2中的“Lua配置項”,可更改這些目錄,但此處暫時無須修改。
知識拓展:更詳細的目錄結構說明見表2-4。
表2-4 更詳細的目錄結構說明

2.2.4 啟動流程
圖2-9展示了Skynet的啟動流程。圖中①②③步由引擎完成,用戶只需在配置文件中指定主服務(表2-1的start項)即可,之后就可以從主服務開始編寫程序了。

圖2-9 Skynet的啟動流程
了解了理論知識,下面開啟實踐之旅。
- Spring Cloud Alibaba核心技術與實戰案例
- 精通JavaScript+jQuery:100%動態網頁設計密碼
- Python 3網絡爬蟲實戰
- Visual C++串口通信技術詳解(第2版)
- C/C++常用算法手冊(第3版)
- 高級語言程序設計(C語言版):基于計算思維能力培養
- AppInventor實踐教程:Android智能應用開發前傳
- PySide 6/PyQt 6快速開發與實戰
- 響應式架構:消息模式Actor實現與Scala、Akka應用集成
- MySQL入門很輕松(微課超值版)
- Android群英傳
- JavaScript腳本特效編程給力起飛
- Python機器學習之金融風險管理
- Flowable流程引擎實戰
- Arduino計算機視覺編程