【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 获取。
需要了解的几个重要参数:
| 参数 | 描述 |
|---|---|
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
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
相关文章:
【Skynet 入门实战练习】开发环境搭建 | 运行第一个项目 | debug console 简单使用
文章目录 写在前面开发环境搭建skynet配置文件项目,启动! debug console 写在前面 本系列【Skynet 入门实战练习】所有源码同步:https://gitee.com/Cauchy_AQ/skynet_practice 开发环境搭建 skynet skynet 框架地址:https://g…...
【探索嵌入式虚拟化技术与应用】— 虚拟化技术深入浅出自学系列
🌈个人主页: Aileen_0v0🔥系列专栏:【探索嵌入式虚拟化技术与应用】💫个人格言:"没有罗马,那就自己创造罗马~" 目录 一、虚拟技术的发展历史 1.1传统技术的局限性: 编辑 1.2云计算和万物互联技术的发展机遇&#x…...
MIB 6.1810实验Xv6 and Unix utilities(5)find
难度:moderate Write a simple version of the UNIX find program for xv6: find all the files in a directory tree with a specific name. Your solution should be in the file user/find.c. 题目要求:实现find ,即在某个路径中,找出某…...
百度爬虫的工作原理解析
百度作为中国最大的搜索引擎,其工作原理备受关注。本文将深入探讨百度爬虫的工作原理,介绍其基本流程以及关键技术,帮助读者更好地理解搜索引擎背后的技术核心。 百度爬虫是百度搜索引擎的重要基石,它们被广泛用于收集互联网上的网…...
Linux入门必备指令
Linux学习之路起始篇——Linux基本指令 文章目录 Linux学习之路起始篇——Linux基本指令**一、ls指令****二、pwd命令****三、cd命令****四、touch指令****五、mkdir命令****六、rm命令****七、man 命令****八、cp命令****九、mv命令****10、cat 指令****十一、tac命令** 前言&…...
linux系统环境下mysql安装和基本命令学习
此篇文章为蓝桥云课--MySQL的学习记录 块引用部分为自己的实验部分,其余部分是课程自带的知识,链接如下: MySQL 基础课程_MySQL - 蓝桥云课 本课程为 SQL 基本语法及 MySQL 基本操作的实验,理论内容较少,动手实践多&am…...
Monitor 原理
每个 Java 对象都可以关联一个 Monitor 对象,如果使用 synchronized 给对象上锁(重量级)之后,该对象头的 Mark Word 中就被设置指向 Monitor 对象的指针。 Monitor组成内容 EntryList(入口列表) 当一个线…...
Java核心知识点整理大全7-笔记
目录 4.1.9. JAVA 锁 4.1.9.1. 乐观锁 4.1.9.2. 悲观锁 4.1.9.3. 自旋锁 4.1.9.4. Synchronized 同步锁 Synchronized 作用范围 Synchronized 核心组件 Synchronized 实现 4.1.9.5. ReentrantLock Lock 接口的主要方法 非公平锁 公平锁 ReentrantLock 与 synchronized …...
Flink Operator 使用指南 之 全局配置
背景 在上一个章节中已经介绍了基本的Flink-Operator安装,但是在实际的数据中台的项目中,用户可能希望看到Flink Operator的运行日志情况,当然这可以通过修改Flink-Operator POD的文件实现卷挂载的形势将日志输出到宿主机器的指定目录下,但是这种办法对数据中台的产品不是…...
手把手教你通过CODESYS V3进行PLC编程(一)
教程背景 宏集MC系列模块化控制器是基于Raspberry Pi的高性能4核控制器,运动控制循环时间最快可达500微秒,实现了计算能力和成本之间的最佳平衡,适用于多轴运动控制和CNC控制。 教程目的 本系列教程将使用宏集MC系列控制器,详细…...
《算法通关村—进制转换问题处理模板》
《算法通关村—进制转换问题处理模板》 先来一个题热热身 504. 七进制数 给定一个整数 num,将其转化为 7 进制,并以字符串形式输出。 示例 1: 输入: num 100 输出: "202"示例 2: 输入: num -7 输出: "-10"提示: …...
python接口自动化测试之接口数据依赖
一般在做自动化测试时,经常会对一整套业务流程进行一组接口上的测试,这时候接口之间经常会有数据依赖,那又该如何继续呢? 那么有如下思路: 抽取之前接口的返回值存储到全局变量字典中。初始化接口请求时,…...
s28.CentOS、Ubuntu、Rocky Linux系统初始化脚本v6版本
CentOS、Ubuntu、Rocky系统初始化脚本 Shell脚本源码地址: Gitee:https://gitee.com/raymond9/shell Github:https://github.com/raymond999999/shell 可以去上面的Gitee或Github仓库代码拉取脚本。 版本功能v6版更新内容1.由于CentOS 6…...
go同步锁 sync mutex
goroutine http://127.0.0.1:3999/concurrency/11 go tour 到此 就结束了. 继续 学习 可以 从 以下网站 文档 https://golang.org/doc/ https://golang.org/doc/code https://golang.org/doc/codewalk/functions/ 博客 https://go.dev/blog/ wiki 服务器教程 服务器…...
使用项目自动生成的dokcerfile第一次构建时把加载aps5.0失败无法找到加载的文件
第一次构建初始化项目自带的dockerfile,内容如下: #See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.#FROM mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim AS base #WORKDIR /a…...
ACREL DC energy meter Application in Indonesia
安科瑞 华楠 Abstract: This article introduces the application of Acrel DC meters in base station in Indonesia.The device is measuring current,voltage and energy together with hall current sensor. 1.Project Overview This company is located in Indonesia a…...
报错!Jupyter notebook 500 : Internal Server Error
Jupyter notebook 报错 500 : Internal Server Error 问题背景 tensorflow-gpu环境,为跑特定代码专门开了一个环境,使用conda安装了Jupyter notebook,能够在浏览器打开Jupyter notebook,但是notebook打开ipynb会报错。 问题分析…...
2023.11.21使用<button>元素来触发form表单和数据提交
2023.11.21使用<button>元素来触发form表单和数据提交 除了使用<input>中的submit方式进行form表单和数据提交,还可以使用button方式,两种方式视使用场景,各有优点。 方法一:可以将<button>放…...
leetcode:504. 七进制数
一、题目: 链接: 504. 七进制数 - 力扣(LeetCode) 函数原型: char* convertToBase7(int num) 二、思路 本题要将十进制数转换为二进制数,只要将十进制num数模7再除7,直到num等于0 每次将模7的结…...
centos安装指定版本docker
centos7安装指定版本的docker 官方文档 https://docs.docker.com/engine/install/centos/ 1、卸载旧版本 $ sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine2、设…...
OpenTwitter MCP Server:让AI助手连接社交媒体,实现自动化情报监控
1. 项目概述:当AI助手学会“刷”社交媒体如果你和我一样,日常工作中需要频繁关注特定领域(比如加密货币、科技动态或某个行业)的社交媒体动态,那你一定理解那种被信息流淹没的疲惫感。手动刷新、筛选、整理,…...
量子纠缠蒸馏技术:原理、应用与最新进展
1. 量子纠缠蒸馏技术概述量子纠缠蒸馏(Quantum Entanglement Distillation)是量子信息科学中的一项基础性技术,其核心目标是从受噪声污染的混合态中提取出高纯度的纠缠态。这项技术最早由Bennett等人于1996年提出,现已成为构建量子…...
彻底解决机械键盘连击问题:免费开源工具KeyboardChatterBlocker完全指南
彻底解决机械键盘连击问题:免费开源工具KeyboardChatterBlocker完全指南 【免费下载链接】KeyboardChatterBlocker A handy quick tool for blocking mechanical keyboard chatter. 项目地址: https://gitcode.com/gh_mirrors/ke/KeyboardChatterBlocker 你是…...
JDspyder终极指南:如何用Python自动化脚本实现京东茅台抢购
JDspyder终极指南:如何用Python自动化脚本实现京东茅台抢购 【免费下载链接】JDspyder 京东预约&抢购脚本,可以自定义商品链接 项目地址: https://gitcode.com/gh_mirrors/jd/JDspyder 在电商促销和限量商品抢购的激烈竞争中,手动…...
测试环境搭建指南:从零开始构建完善的测试体系
测试环境搭建指南:从零开始构建完善的测试体系 前言 各位前端小伙伴,不知道你们有没有这样的经历:在自己电脑上测试好好的,一到CI环境就各种失败。 我曾经因为测试环境和生产环境不一致,导致线上出现了一个严重bug。后…...
Syzygy-of-Thoughts:用代数几何思想提升大语言模型推理能力
1. 项目概述:当大语言模型遇上代数几何如果你最近在折腾大语言模型(LLM)的推理能力提升,大概率听说过“思维链”(Chain of Thought, CoT)和“自洽性”(Self-Consistency, CoT-SC)这些…...
自签名证书
证书生成私钥openssl genrsa -out localhost.key 2048生成自签名证书openssl req -new -x509 -key localhost.key -out localhost.crt -days 365 \-subj "/CNlocalhost" \-addext "subjectAltNameDNS:localhost,IP:127.0.0.1,IP:::1"...
MAXON 机电高压油安全切断阀 通用型摆动式闸阀 灰铸铁 8790
在工业锅炉、熔炉及加热系统中,燃料管路的安全切断是防控火灾与爆炸风险的核心环节。MAXON(麦克森)8790 机电高压油安全切断阀,作为霍尼韦尔旗下经典的通用型摆动式闸阀,以灰铸铁阀体、毫秒级切断速度与严苛安全认证&a…...
【深度解析】Hermes Agent 新版能力:后台 Computer Use、多智能体编排与 /goal 自主任务循环实战
摘要 本文解析 Hermes Agent 新版核心能力:后台电脑操控、多智能体协同、Kanban 工作流与 /goal 长任务模式,并用 Python 实现一个可运行的自主任务编排原型。背景介绍 AI Agent 正在从“单轮问答工具”演进为“长期运行的自主工作系统”。传统大模型应用…...
经营分析≠财务分析,经营分析必看的3条路径分析
每个月开经营分析会,我最怕看到什么?就是财务把利润表从头到尾念了一遍,收入多少、成本多少、费用多少,然后开始读PPT。念完就散会。问题解决了吗?没有。说实话,我第一次看这种汇报也觉得数据很全ÿ…...
