【Skynet 入门实战练习】开发环境搭建 | 运行第一个项目 | debug console 简单使用

文章目录

写在前面

本系列【Skynet 入门实战练习】所有源码同步:https://gitee.com/Cauchy_AQ/skynet_practice

开发环境搭建

skynet

sh 复制代码
git clone https://github.com/cloudwu/skynet.git
  • 编译skynet
sh 复制代码
make 'linux'

成功编译会在 skynet 文件夹下多出一个 skynet 可执行文件

  • 执行 skynet 示例
sh 复制代码
./skynet examples/config

如上成功跑起了 skynet 的官方示例。


配置文件

skynet 启动服务需要指定配置文件,这里以官方示例 Demo 来简单介绍。

examples/config

lua 复制代码
include "config.path"

-- preload = "./examples/preload.lua"	-- run preload.lua before every lua service run
thread = 8
logger = nil
logpath = "."
harbor = 1
address = "127.0.0.1:2526"
master = "127.0.0.1:2013"
start = "main"	-- main script
bootstrap = "snlua bootstrap"	-- The service for bootstrap
standalone = "0.0.0.0:2013"
-- snax_interface_g = "snax_g"
cpath = root.."cservice/?.so"
-- daemon = "./skynet.pid"

第一行 include "config.path",表示当前配置文件包含了另一个配置文件 config.path,且这个文件相对于 examples/config 在一个目录下。

config.path

lua 复制代码
root = "./"
luaservice = root.."service/?.lua;"..root.."test/?.lua;"..root.."examples/?.lua;"..root.."test/?/init.lua"
lualoader = root .. "lualib/loader.lua"
lua_path = root.."lualib/?.lua;"..root.."lualib/?/init.lua"
lua_cpath = root .. "luaclib/?.so"
snax = root.."examples/?.lua;"..root.."test/?.lua"

配置文件实际上就是一段 lua 代码,通常,我们以 key = value 的形式对配置项赋值。

skynet 在启动时,会读取里面必要的配置项,并将暂时用不到的配置项以字符串形式保存在 skynet 内部的 env 表中。这些配置项可以通过 skynet.getenv 获取。


需要了解的几个重要参数:

参数 描述
lualoader lua 脚本加载器,通常配置为 skynet/lualib/loader.lua
luaservice 服务脚本路径,包括 skynet 框架自带服务和自己写的服务
lua_path lua 脚本路径,即 lua 实现的库文件路径
lua_cpath 用 C 编写的程序库路径,.so 文件路径
cpath 用 C 编写的服务模块的位置,通常指 cservice 下那些 .so 文件
thread 启用的工作线程数量,一般配置为 CPU 核心数
harbor 一般配置为 0 ,采用 cluster 集群模式,skynet 工作在单节点模式下。此时 master 和 address 以及 standalone 都不必设置,否则 master/slave集群模式,指定 1-255 间的任意整数,表示节点唯一编号
start 主服务的入口
bootstrap skynet 启动的第一个服务以及其启动参数。默认配置为 snlua bootstrap ,即启动一个名为 bootstrap 的 lua 服务
snax 用 snax 框架编写的服务的查找路径
preload 在设置完 package 中的路径后,加载 lua 服务代码前,loader 会尝试先运行一个 preload 制定的脚本,默认为空
daemon 配置 daemon = "./skynet.pid" 可以以后台模式启动 skynet,同时请配置 logger
logger 决定了 skynet 内建的 skynet_error 这个 C API 将信息输出到什么文件中。logger 配置为 nil,将输出到标准输出

详细配置说明参考:https://github.com/cloudwu/skynet/wiki/Config


项目,启动!

在了解了上述的基础配置后,我们可以开始运行自己的 skynet 项目了。

  • 首先准备好项目需要的几个文件及文件夹
  • lualib 跟游戏逻辑无关的通用的 Lua 库代码
  • service 各种游戏服务入口代码,这里的一个文件就是一个服务
  • etc 配置文件,比如配置服务器端口,数据库端口
  • module 游戏逻辑
  • test 测试代码

暂且对上面几个文件夹的作用有个印象,现在我们只需要编写配置文件、一个主服务,就可以先运行一个游戏项目的空壳了。


etc/config.path

lua 复制代码
root = "./"
lualoader   =   root .. "skynet/lualib/loader.lua"
luaservice  =   root .. "service/?.lua;" .. root .. "skynet/service/?.lua" 
lua_path    =   root .. "lualib/?.lua;" .. root .. "skynet/lualib/?.lua;" .. root .. "module/?.lua"
lua_cpath   =   root .. "luaclib/?.so;" .. root .. "skynet/luaclib/?.so"
cpath       =   root .. "skynet/cservice/?.so"
snax        =   root .. "service/?.lua"

etc/config

lua 复制代码
include "config.path"

-- 启动配置
thread      = 4
bootstrap   = "snlua bootstrap"
start       = "main"
harbor      = 0
-- preload = "preload.lua"
-- daemon = "skynet.pid"

-- debug console
debug_console_port = 4040

service/main.lua

lua 复制代码
local skynet = require "skynet"

local debug_port = tonumber(skynet.getenv("debug_console_port")) or 4040

skynet.start(function()
    skynet.error("[main.lua] start")

    if not skynet.getenv "daemon" then
        -- 不是 daemon 模式启动则开启 console 服务
		local console = skynet.newservice("console")
	end
    -- 开启 debug console 服务
    skynet.newservice("debug_console", debug_port)

    -- main 服务只作为入口,启动完所需的服务后就可以退出
    skynet.exit()
end)

编写好后,就可以通过 ./skynet/skynet etc/config 来启动项目:


debug console

我们在这份代码中,有自行启动一个 debug console 服务,运行在 4040 端口,端口可通过配置文件进行配置。

这是一个 skynet 自带的调试控制台服务,可以通过 telnet 工具来连接,执行 telnet 127.0.0.1 4040

  • 执行 help,查看调试工具提供的指令
  • list,列出所有服务,以及启动服务的命令参数
  • mem,让所有 lua 服务汇报自己占用的内存

更多指令介绍可参考:https://github.com/cloudwu/skynet/wiki/DebugConsole

相关推荐
慢慢沉19 小时前
Lua(数据库访问)
开发语言·数据库·lua
慢慢沉19 小时前
Lua协同程序(coroutine)
lua
UWA1 天前
UWA DAY 2025 游戏开发者大会|全议程
游戏·unity·性能优化·游戏开发·uwa·unreal engine
慢慢沉2 天前
Lua元表(Metatable)
lua
龚子亦2 天前
【Unity开发】数据存储——XML
xml·unity·游戏引擎·数据存储·游戏开发
慢慢沉2 天前
Lua(字符串)
开发语言·lua
慢慢沉2 天前
Lua(数组)
开发语言·lua
慢慢沉2 天前
Lua(迭代器)
开发语言·lua
慢慢沉2 天前
Lua基本语法
开发语言·lua
Feng.Lee3 天前
接口测试Postman工具高级使用技巧
功能测试·测试工具·lua·postman·可用性测试