寫在前面
本文將從零開始,寫第一個 skynet 程序 HelloWorld 。通過 HelloWorld 可以熟悉 skynet 的運作方式,和了解其 api 。
文章目錄
- 寫在前面
- 準備工作
- 編寫代碼
- 運行結果
準備工作
首先要有一個編譯好,而且工作正常的 skynet 。
編寫代碼
在 skynet/example 目錄編寫一個配置文件,一個代碼文件。
代碼文件
-- main_ping.lua-- require skynet
local skynet = require "skynet"-- 初始化函數
function init()skynet.error("This is main_ping service.")
end-- 服務函數
function task()while true do-- 打印時間戳skynet.error("time: " .. math.floor(skynet.time()))-- 睡眠一秒skynet.sleep(100) end
end-- 注冊初始化函數
skynet.init(init)-- 啟動服務
skynet.start(task)
為了讓 bootstrap 加載 main_ping 還需要一個配置文件。
-- config_ping-- 啟動多少個工作線程
thread = 8-- skynet 工作在單節點模式下
harbor = 0-- skynet 節點的主程序
start = "main_ping"-- lua 服務代碼所在的位置
luaservice = "./service/?.lua;./examples/?.lua"
運行結果
root@macbook:~/skynet# ./skynet examples/config_ping
[:00000001] LAUNCH logger
[:00000002] LAUNCH snlua bootstrap
[:00000003] LAUNCH snlua launcher
[:00000004] LAUNCH snlua cdummy
[:00000005] LAUNCH harbor 0 4
[:00000006] LAUNCH snlua datacenterd
[:00000007] LAUNCH snlua service_mgr
[:00000008] LAUNCH snlua main_ping
[:00000008] This is main_ping service.
[:00000008] time: 1692068312
[:00000008] time: 1692068313
...
可以看到,一共是開了8個服務。
- logger
- snlua bootstrap
- snlua launcher
- snlua cdummy
- harbor
- snlua datacenterd
- snlua service_mgr
- snlua
main_ping
其中第8個服務 snlua main_ping 才是我們自己編寫的,其他都是系統服務。
嚴格來說,是 bootstrap 通知 launcher 啟動一個 snlua ,由 snlua 執行我們的服務。
服務啟動時,先調用了init()
初始化函數,然后執行task()
進入工作,周期打印時間戳。
skynet|+ logger|+ snlua bootstrap|+ snlua launcher|+ snlua cdummy| || + harbor|+ snlua datacenterd|+ snlua service_mgr|+ snlua main_ping