返回顶部
首页 > 资讯 > 服务器 >【从零开始学Skynet】基础篇(二):了解Skynet
  • 405
分享到

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

luaSkynetLinux服务器 2023-08-31 06:08:26 405人浏览 泡泡鱼
摘要

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

1、节点和服务

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

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

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

2、Skynet的目录结构 

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

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

examples

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

 3、启动流程

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

 4、配置文件

        Skynet提供了很多配置项,可以打开配置文件examples/config查看它的内容:

include "config.path"-- preload = "./examples/preload.lua"-- run preload.lua before every lua service runthread = 8logger = nillogpath = "."harbor = 1address = "127.0.0.1:2526"master = "127.0.0.1:2013"start = "main"-- main scriptbootstrap = "snlua bootstrap"-- The service for bootstrapstandalone = "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_cpathC语言编写的程序库(.so文件)的路径
snax 用 snax 框架编写的服务的查找路径。

        Skynet提供了很多功能,有些功能还提供多种实现方法,因此配置项较多。读者可以打开https://github.com/cloudwu/skynet/wiki/Config查看详细说明。

来源地址:https://blog.csdn.net/yangyu20121224/article/details/130081922

--结束END--

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

本文链接: https://lsjlt.com/news/384435.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作