写在前面
本文将从零开始,写第一个 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