本文将从零开始,写第一个 skynet 程序 HelloWorld 。通过 HelloWorld 可以熟悉 skynet 的运作方式,和了解其 api 。
文章目录 写在前面准备工作编写代码运行结果准备工作
首先要有一个编译好,而且工作正常的 skynet 。
编写代码在 skynet/example 目录编写一个配置文件,一个代码文件。
代码文件
-- main_ping.lua-- require skynetlocal 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) endend-- 注册初始化函数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个服务。
loggersnlua bootstrapsnlua launchersnlua cdummyharborsnlua datacenterdsnlua service_mgrsnlua 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