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

文章目录

  • 写在前面
  • 开发环境搭建
    • skynet
      • 配置文件
      • 项目,启动!
    • debug console

写在前面

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

开发环境搭建

skynet

  • skynet 框架地址:https://github.com/cloudwu/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 4040skynet.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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/158397.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么款式的蓝牙耳机跑步不容易掉?推荐几款很不错的运动耳机

​如果你正在寻找一款性能卓越、佩戴舒适的耳机,那么运动耳机绝对是你的不二选择。它们不仅具备出色的音质,还具备防水、防汗、防震等多项特点,让你在运动时更加尽情享受音乐。接下来给大家推荐几款很不错的运动耳机。 1.南卡开放式运动耳机…

南京数字孪生赋能工业制造,加速推进制造业数字化转型

随着南京信息技术的迅猛发展和工业管理的不断演进,传统的工业管理方式已经无法满足企业对高效、智能和可持续发展的需求。针对这一情况,数字孪生技术应运而生,为南京工业管理带来了全新的变革和机遇。以数字孪生为理念,三维可视化…

闪存基本原理

系列文章目录 一、SSD主控 二、PCIe和NVMe控制器前端子系统 文章目录 系列文章目录三、闪存基本原理1.结构2.衍生问题 三、闪存基本原理 闪存是SSD的存储介质(NAND Flash),它是一种非易失性存储器(Non-volatile memory&#xff0…

centos7 怎么让命令行显示中文(英文->中文)

要让CentOS 7命令行显示中文,您需要确保您的系统支持中文字符集,并在命令行中设置正确的语言环境。以下是设置中文字符集和语言环境的步骤: 首先,确保您的系统已经安装了中文字体。在终端中运行以下命令来查看安装的中文字体&…

开源免费的流程设计器如何选型

大家在开发OA办公自动化、ERP、CRM、BPM、低代码平台等项目的时候,经常用到流程引擎,目前主流的开源流程引擎有activiti、flowable、camunda。这几个开源的流程引擎均基于BPMN2.0国际规范标准,其功能均比较强大,接口也很丰富。但涉…

关键性进展! 小米造车露真容 预计明年上市

大家好,我是极智视界,欢迎关注我的公众号,获取我的更多前沿科技分享 邀您加入我的知识星球「极智视界」,星球内有超多好玩的项目实战源码和资源下载,链接:https://t.zsxq.com/0aiNxERDq 小米在各种不同的产品上都在不断打上自己的品牌,这绝对不止于智能手机,而是有智能…

javaScript 内存管理

1 js 内存机制 内存空间:栈内存(stack)、堆内存(heap) 栈内存:所有原始数据类型都存储在栈内存中,如果删除一个栈原始数据,遵循先进后出;如下图:a 最先进栈&…

【剪枝】torch-pruning的基本使用

论文:DepGraph: Towards Any Structural Pruning 工程:https://github.com/VainF/Torch-Pruning 算法和库的使用介绍:CVPR 2023 | DepGraph 通用结构化剪枝 1 TP的简介 该算法介绍了DepGraph 如何建模结构化剪枝中的层依赖,实现任…

英国国家量子计算中心与IBM签署重要协议!英国进入实用量子时代

​(图片来源:网络) 近日,英国国家量子计算中心(NQCC)与IBM达成了一项重要协议。根据该协议,NQCC将为英国研究人员提供IBM量子高级计划的云访问权限,其中包括IBM的量子计算系统舰队。…

一文带你拿下MySQL之增删查改(基础)

✏️✏️✏️今天给各位带来的是关于数据库增删查改基础方面的知识。 清风的CSDN博客 😛😛😛希望我的文章能对你有所帮助,有不足的地方还请各位看官多多指教,大家一起学习交流! 动动你们发财的小手&#xf…

Activiti7工作流引擎:生成实时的流程图片

实时获取当前流程对应的流程图片,并对当前正在审批的节点进行高亮显示。 public class ActivitiController {Autowiredprivate ProcessEngine processEngine;Autowiredprivate RepositoryService repositoryService;Autowiredprivate RuntimeService runtimeService…

vue超好用的自定义指令封装

一、指令封装 目录结构: index.ts 统一注册 import { App, Directive } from "vue"; import auth from "./modules/auth"; import copy from "./modules/copy"; import waterMarker from "./modules/waterMarker"; impor…

OpenStack-train版安装之基础组件安装

基础组件安装 安装MariaDB(数据库)安装RabbitMQ(消息队列)安装Memcached(缓存) 安装MariaDB(数据库) 安装 # yum install mariadb mariadb-server python2-PyMySQL -y数据库配置 …

2023年中国感应电炉产业链、产量、销量及市场规模分析[图]

感应电炉行业定义是指使用电磁感应原理,通过感应电流使金属工件在短时间内达到预定温度的工业设备。广泛应用于冶金、机械、汽车、航空、航天、船舶、电子、医疗器械等领域。 感应电炉行业产业链 资料来源:共研产业咨询(共研网) …

CSS实现空心的“尖角”

大家好,我是南宫,来分享一个昨天解决的问题。 我记得之前刷面试题的时候,CSS面试题里面赫然有一题是“如何用CSS实现三角形”,我觉得这个问题确实很经典,我上的前端培训班当初就讲过。 大概思路如下: 先…

【每周一测】Java阶段三阶段考试

目录 1、SpringBoot在整合RabbitMQ时需要导入的包是 2、下列关于RabbitMQ的confirm消息确认机制解释说明正确的是 3、关于SpringBoot的配置文件,以下说法正确的是() 4、变量命名规范说法正确的是? 5、哪个关键字可以对对象加互斥锁&…

优思学院|质量管理怎样才能做好?

质量管理怎样才能做好?这是一个好问题,很多人第一时间会想到建立一个稳定的质量管理体系,例如ISO9001,又或者善用QC七大手法等等,虽然以上这些方法都是实用和正确的,绝大多数企业通常最忽略的,其…

备案信息一键查询:网站备案信息查询API的操作与优势

前言 在当今数字化的时代,企业的在线存在至关重要。而为了确保在网络空间的法规合规性,了解和管理网站备案信息变得尤为重要。为了使这一过程更为高效、便捷,网站备案信息查询API应运而生,为企业提供了一种简便的方式来获取和管理…

如何打造适用的MES管理系统解决方案

在当前的制造业领域,项目型生产企业面临着独特的挑战。尽管国外的大型软件公司提供了某些解决方案,但由于地域、文化和制度的差异,这些方案并不完全满足企业的实际需求。为了解决这一难题,我们必须以客户为中心,围绕他…

数字逻辑电路基础-时序逻辑电路之锁存器

文章目录 一、锁存器简介二、verilog源码三、综合及仿真结果一、锁存器简介 本文介绍数字逻辑电路中一种常用的基础时序逻辑电路-锁存,顾名思义,它的功能就是将输入在控制信号有效时透明传输到输出端,当控制信号无效时,输出值保持不变。它具有记忆和存储功能。这是它区别组…