【从零开始学Skynet】基础篇(二):了解Skynet

这篇具有很好参考价值的文章主要介绍了【从零开始学Skynet】基础篇(二):了解Skynet。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、节点和服务

        在下图所示的服务端系统中,每个Skynet进程(操作系统进程)都称为一个节点,每个节点都可以开启数千个Lua服务,每个服务都是一个Actor。不同节点可以部署在不同的物理机上,提供分布式集群的能力。   

skynet,从零开始学Skynet,lua,Skynet,Linux,服务器

  在上图中,我们开启了3个节点和5个服务的服务端系统。

拓展:其实Skynet的强项主要是在于单个节点内的并行运算,对于分布式集群,它只提供一些基础设施。在Skynet引擎中,分布式程序要处理很多异常情况。

2、Skynet的目录结构 

        Skynet的目录结构如下图所示:

skynet,从零开始学Skynet,lua,Skynet,Linux,服务器

目录/文件 说明
3rd 存放第三方的代码,如Lua、jemalloc等

examples

范例:KV数据库范例的部分服务(如main服务、simpledb服务)位于该目录下
luaclib 用C语言编写的程序库,如bson解析、md5解析等
lualib 用Lua编写的程序库
lualib-src lualib目录下,库文件的源码
service  包含Skynet内置的一些服务,比如KV数据库范例用到的launcher、gate            
cservice 存放内置的用C语言编写的服务
service-src cservice目录下,程序的源码
skynet-src 使用C写的Skynet核心代码
test 测试代码:如果遇到某些不懂的功能,可以参考该目录下的代码

 3、启动流程

        下图展示了Skynet的启动流程。图中①②③步由引擎完成,用户只需在配置文件中指定主服务即可,之后就可以从主服务开始编写程序了。

skynet,从零开始学Skynet,lua,Skynet,Linux,服务器

 4、配置文件

        Skynet提供了很多配置项,可以打开配置文件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"

        这个配置文件实际上就是一段 lua 代码,通常,我们以 key = value 的形式对配置项赋值。skynet 在启动时,会读取里面必要的配置项,并将暂时用不到的配置项以字符串形式保存在 skynet 内部的 env 表中。这些配置项可以通过 skynet.getenv 获取。

主要配置项 说明
thread  启动多少个工作线程,通常不要将它配置超过你实际拥有的 CPU 核心数。
bootstrap  skynet 启动的第一个服务以及其启动参数。默认配置为 snlua bootstrap,即启动一个名为 bootstrap 的 lua 服务。通常指的是 service/bootstrap.lua 这段代码。
cpath  用C编写的服务模块的位置,通常指 cservice 下那些 .so 文件。如果你的系统的动态库不是以 .so 为后缀,需要做相应的修改。这个路径可以配置多项,以 ; 分割。
start 这是 bootstrap 最后一个环节将启动的 lua 服务,也就是你定制的 skynet 节点的主程序。默认为 main ,即启动 main.lua 这个脚本。这个 lua 服务的路径由下面的 luaservice 指定。
harbor 

可以是 1-255 间的任意整数。一个 skynet 网络最多支持 255 个节点。每个节点有必须有一个唯一的编号。如果 harbor 为 0 ,skynet 工作在单节点模式下此时 master 和 address 以及 standalone 都不必设置。

次要配置项 说明
logger 它决定了 skynet 内建的 skynet_error 这个 C API 将信息输出到什么文件中。如果 logger 配置为 nil ,将输出到标准输出。你可以配置一个文件名来将信息记录在特定文件中。
logpath 配置一个路径,当你运行时为一个服务打开 log 时,这个服务所有的输入消息都会被记录在这个目录下,文件名为服务地址。
address 当前 skynet 节点的地址和端口,方便其它节点和它组网。注:即使你只使用一个节点,也需要开启控制中心,并额外配置这个节点的地址和端口。
master  指定 skynet 控制中心的地址和端口,如果你配置了 standalone 项,那么这一项通常和 standalone 相同。
standalone 如果把这个 skynet 进程作为主进程启动(skynet 可以由分布在多台机器上的多个进程构成网络),那么需要配置standalone 这一项,表示这个进程是主节点,它需要开启一个控制中心,监听一个端口,让其它节点接入。

在第一行的代码中我们可以看到include "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"
配置项 说明
luaservice  lua 服务代码所在的位置。可以配置多项,以 ; 分割。
lualoader 用哪一段 lua 代码加载 lua 服务。通常配置为 lualib/loader.lua ,再由这段代码解析服务名称,进一步加载 lua 代码。snlua 会将下面几个配置项取出,放在初始化好的 lua 虚拟机的全局变量中。具体可参考实现。
lua_path 将添加到 package.path 中的路径,供 require 调用。
lua_cpath C语言编写的程序库(.so文件)的路径
snax  用 snax 框架编写的服务的查找路径。

        Skynet提供了很多功能,有些功能还提供多种实现方法,因此配置项较多。读者可以打开https://github.com/cloudwu/skynet/wiki/Config查看详细说明。文章来源地址https://www.toymoban.com/news/detail-673209.html

到了这里,关于【从零开始学Skynet】基础篇(二):了解Skynet的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【从零开始学Skynet】实战篇《球球大作战》(十二):场景代码设计(上)

            场景服务会处理绝大部分的游戏逻辑。新建 service/scene/init.lua ,开始编写相关代码。    场景中包含小球和食物这两种对象,先看看小球的实现。代码如下所示: 首先定义 balls 表 和 ball 类 , balls 表 会以 玩家 id 为索引,保存战场中各个小球的信息; 小球与玩

    2023年04月21日
    浏览(41)
  • 从零开始:了解ChatGPT和AIGC基础

    自2012年的AlexNet在ImageNet大赛中取得卓越成绩以来,深度学习技术已经成为人工智能领域的重要技术。随着算力的提升和模型的优化,深度学习技术已经取得了巨大的成功,应用于图像识别、自然语言处理、语音识别等领域。 在自然语言处理领域,GPT(Generative Pre-trained Transfo

    2024年02月22日
    浏览(41)
  • 【从零开始学习Linux】一文带你了解Shell外壳及用户权限(一)

    🚩 纸上得来终觉浅, 绝知此事要躬行。 🌟主页:June-Frost 🚀专栏:Linux入门 🔭【从零开始学习Linux】系列均属于Linux入门,主要包含Linux操作系统下的指令、操作、权限以及开发工具,使得拥有基本编写代码的能力。 🔥该文章主要了解Shell外壳(理论)及用户权限,其中用

    2024年02月06日
    浏览(74)
  • 【从零开始学习Linux】一文带你了解Shell外壳及用户权限(二)

    🚩 纸上得来终觉浅, 绝知此事要躬行。 🌟主页:June-Frost 🚀专栏:Linux入门 🔭【从零开始学习Linux】系列均属于Linux入门,主要包含Linux操作系统下的指令、操作、权限以及开发工具,使得拥有基本编写代码的能力。 🔥该文章主要了解Shell外壳(理论)及用户权限,该系列

    2024年02月05日
    浏览(51)
  • 【从零开始学习Linux】一文带你了解yum周边生态及vim常见模式

    🚩 纸上得来终觉浅, 绝知此事要躬行。 🌟主页:June-Frost 🚀专栏:Linux入门 🔭【从零开始学习Linux】系列均属于Linux入门,主要包含Linux操作系统下的指令、操作、权限以及开发工具,使得拥有基本编写代码的能力。 🔥该文章旨在深入探讨Linux工具,其中包括yum的使用方法

    2024年02月05日
    浏览(48)
  • 从零开始了解大数据(五):YARN篇

    目录 前言 一、Hadoop YARN介绍 二、Hadoop YARN架构与组件 1.ResourceManager(RM) 2.NodeManager(NM) 3.ApplicationMaster 三、程序提交YARN交互流程 1.客户端阶段 2.ApplicationMaster阶段 四、YARN资源调度器Scheduler 1.FIFO Scheduler 2.Capacity Scheduler 3.Fair Scheduler 总结 YARN是一个资源调度平台,负责为运算

    2024年02月01日
    浏览(38)
  • 【从零开始学习JAVA | 第四十篇】了解线程池

    目录 前言: 线程池: 线程池的工作流程: 代码实现线程池: 任务拒绝策略:  线程池多大才算合适? 总结:         在Java编程中,线程池是一个强大的工具,它能够管理和复用线程,提供高效的并发处理能力。通过线程池,我们可以有效地控制并发线程的数量,并降

    2024年02月13日
    浏览(56)
  • 从零开始了解大数据(一):数据分析入门篇

    目录 前言 一、数据分析 1.企业数据分析方向 (1) 原因分析:离线分析 (Batch Processing) (2) 现状分析:实时分析 (Real Time Processing | Streaming) (3) 预测分析:机器学习 (Machine Learning) 2.数据分析基本步骤 3.大数据5V特征 4.分布式与集群 总结 在开启大数据的探索之前,我们首先需要理解

    2024年02月04日
    浏览(37)
  • 从零开始之了解电机及其控制(11)实现空间矢量调制

    广泛地说,空间矢量调制只是将电压矢量以及磁场矢量在空间中调制到任意角度,通常同时最大限度地利用整个电压范围。 其他空间矢量调制模式确实存在,并且根据您最关心的内容,它们可能值得研究。 如何实际执行这种所谓的交替反向序列 PWM,以及更普遍的真正空间矢

    2024年02月07日
    浏览(26)
  • 服务器从零开始配环境

    宝塔,xftp,xshell 阿里云的话就是在实例那里点远程连接,输入: yum install -y wget wget -O install.sh http://download.bt.cn/install/install_6.0.sh sh install.sh 中途输入y确定安装 安装成功就是这样的页面: 在软件商店下好常用的软件 服务器买的核数小,每次在宝塔安装mysql都会崩,得自己手

    2024年01月22日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包