【skynet】skynet 入门代码

写在前面

本文将从零开始,写第一个 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(function()
    skynet.fork(task)
end)

为了让 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
[:00000002] KILL self
[:00000008] time: 1692068313
[:00000008] time: 1692068314
...

可以看到,一共是开了8个服务。

  1. logger
  2. snlua bootstrap
  3. snlua launcher
  4. snlua cdummy
  5. harbor
  6. snlua datacenterd
  7. snlua service_mgr
  8. snlua main_ping

其中第8个服务 snlua main_ping 才是我们自己编写的,其他都是系统服务。

严格来说,是 bootstrap 通知 launcher 启动一个 snlua ,由 snlua 执行我们的服务。

服务启动时,先调用了init()初始化函数,然后执行task()进入工作,周期打印时间戳。

由于 main_ping 是一个死循环,所以要在外面套一个 skynet.fork() 。 main_ping 启动后, bootstrap 完成使命正常退出。

skynet
  |
  + logger
  |
  + snlua bootstrap
      |
      + snlua launcher
      |
      + snlua cdummy
      |   |
      |   + harbor
      |
      + snlua datacenterd
      |
      + snlua service_mgr
      |
      + snlua main_ping

你可能感兴趣的:(skynet,skynet)