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

写在前面

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

开发环境搭建

skynet

git clone https://github.com/cloudwu/skynet.git
  • 编译skynet
make 'linux'

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

在这里插入图片描述

  • 执行 skynet 示例
./skynet examples/config

在这里插入图片描述
如上成功跑起了 skynet 的官方示例。


配置文件

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

examples/config

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

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 获取。


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

参数描述
lualoaderlua 脚本加载器,通常配置为 skynet/lualib/loader.lua
luaservice服务脚本路径,包括 skynet 框架自带服务和自己写的服务
lua_pathlua 脚本路径,即 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

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

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

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

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Skynet Debug是指对Skynet系统进行调试和排错的过程。Skynet是一个开源的高性能分布式游戏服务器框架,为开发者提供了一套简单易用、高效稳定的游戏服务器解决方案。 在进行Skynet Debug时,首先需要通过查看系统日志来定位问题。Skynet系统会记录各个模块的运行情况和错误信息,开发者可以通过这些日志信息来判断是否有错误发生,并定位出错的位置。 其次,开发者可以使用调试工具来进行线上调试。Skynet提供了丰富的调试工具,比如skynet.abort函数可以在运行时终止服务,并打印出完整的调用栈信息,帮助开发者快速定位错误。此外,还可以使用skynet.trace函数跟踪消息的传递流程,观察各个模块之间的交互情况,以找出可能存在的问题。 另外,对于一些复杂的问题,开发者还可以使用代码注入的方式进行调试。Skynet提供了插件机制,可以动态加载自定义的模块,并在运行时注入代码,以修改或监控系统运行过程中的一些关键点,帮助开发者检测潜在的问题。 在调试过程中,需要注意一些常见的问题。比如,可能因为不同模块间的消息传递顺序不一致而导致问题;还可能出现资源泄露或内存溢出等问题;另外,网络通信的稳定性和数据传输的正确性也需要关注。 总之,Skynet Debug开发者对Skynet系统进行调试和排错的重要过程,通过使用系统日志、调试工具以及代码注入等方法,可以帮助开发者定位问题并解决。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ღCauchyོꦿ࿐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值