官术网_书友最值得收藏!

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的啟動流程

了解了理論知識,下面開啟實踐之旅。

主站蜘蛛池模板: 调兵山市| 博客| 清徐县| 安新县| 赣榆县| 邹城市| 三台县| 错那县| 崇州市| 垫江县| 威远县| 博罗县| 繁昌县| 怀来县| 湄潭县| 绵竹市| 曲阳县| 绥宁县| 怀安县| 平远县| 河曲县| 兴仁县| 乐东| 夏邑县| 桦甸市| 昌乐县| 夹江县| 陕西省| 长顺县| 肇源县| 札达县| 淮安市| 莒南县| 搜索| 如东县| 来安县| 化州市| 海丰县| 许昌市| 高台县| 棋牌|