![百万在线:大型游戏服务端开发](https://wfqqreader-1252317822.image.myqcloud.com/cover/191/40643191/b_40643191.jpg)
2.2 理解Skynet
本节将带领读者理解Skynet的特有概念,然后进行实践。
2.2.1 节点和服务
在图2-7所示的服务端系统中,每个Skynet进程(操作系统进程)称为一个节点,每个节点可以开启数千个服务。如同1.4.1节中的程序,不同节点可以部署在不同的物理机上,提供分布式集群的能力。
2.1.2节的KV数据库仅开启了一个Skynet进程,它是单节点的服务端系统。
每个Skynet节点可以调度数千个Lua服务,让它们并行工作。对应1.7节的内容可知,每个服务都是一个Actor。
![](https://epubservercos.yuewen.com/BAD2B3/21097070501733306/epubprivate/OEBPS/Images/2-7.jpg?sign=1738784290-a2FtcflPfDkDLvs0QkxwBybyM0a2NQhY-0-3904cee4b5f245ac9178fb581c547111)
图2-7 开启3个节点5个服务的服务端系统
知识拓展:Skynet的强项在于单个节点内的并行运算,对于分布式集群,它只提供一些基础设施。对于1.4.4节提及的“分布式程序要处理很多异常情况”,在Skynet引擎中,这些异常情况依然要使用者自行处理。
2.2.2 配置文件
Skynet提供了很多配置项,可以打开KV数据库范例(见2.1.2节)的配置文件examples/config查看它的内容。笔者整理了配置模板,见代码2-1。到目前为止,读者仅需关注thread和start这两项,它们的含义见表2-1。
代码2-1 配置模板,可以替换examples/config
(资源:Chapter2/1_config)
--必须配置 thread = 8 --启用多少个工作线程 cpath = "./cservice/?.so" --用C编写的服务模块的位置 bootstrap = "snlua bootstrap" --(固定)启动的第一个服务 --bootstrap配置项 start = "main" --主服务入口 harbor = 0 --(固定)不使用主从节点模式 --lua配置项(暂时固定) lualoader = "./lualib/loader.lua" luas ervice = "./service/?.lua;".."./test/?.lua;".."./examples/?.lua;".."./ test/?/init.lua" lua_path = "./lualib/?.lua;" .. "./lualib/?/init.lua" lua_cpath = "./luaclib/?.so" --后台模式(必要时开启) --daemon = "./skynet.pid" --logger = "./userlog"
表2-1 常见配置项说明
![](https://epubservercos.yuewen.com/BAD2B3/21097070501733306/epubprivate/OEBPS/Images/b2-1.jpg?sign=1738784290-RLBcedXQHj4twSOt66JxFwEZbjUcLg9Q-0-7975e60091fa3734f49a1a67134edbee)
Skynet提供了很多功能,有些功能还提供多种实现方法,因此配置项较多。读者可以打开https://github.com/cloudwu/skynet/wiki/Config查看详细说明。
知识拓展:配置模板的各项说明见表2-2。
表2-2 配置模板的各项说明
![](https://epubservercos.yuewen.com/BAD2B3/21097070501733306/epubprivate/OEBPS/Images/b2-2.jpg?sign=1738784290-XYGIsKajs3lFTUO5cNzt8amDbr0t7k4F-0-56c943854e3a7d469552994b5dd17ddf)
2.2.3 目录结构
Skynet的目录结构如图2-8所示,读者(目前)只需关注表2-3中的几项。
![](https://epubservercos.yuewen.com/BAD2B3/21097070501733306/epubprivate/OEBPS/Images/2-8.jpg?sign=1738784290-fgC9MmLP5rSgIVeWtfmCxeUVQaecm9pi-0-c50e28765bdf937b492e1805c3ba279e)
图2-8 Skynet的目录结构
表2-3 Skynet的目录结构说明
![](https://epubservercos.yuewen.com/BAD2B3/21097070501733306/epubprivate/OEBPS/Images/b2-3.jpg?sign=1738784290-Cqh4i5yeCvxDLg7FgZgJMxLjV9N2Mj6l-0-297a728563dffe92bb7d3b12bbe93ea1)
Skynet提供了很高的灵活性,更改表2-2中的“Lua配置项”,可更改这些目录,但此处暂时无须修改。
知识拓展:更详细的目录结构说明见表2-4。
表2-4 更详细的目录结构说明
![](https://epubservercos.yuewen.com/BAD2B3/21097070501733306/epubprivate/OEBPS/Images/b2-4.jpg?sign=1738784290-oebQlDjnMxCDNAJ9Hr2qQ5zDgHCN9pIn-0-eba12fa938a7d27d1186463a38faf438)
2.2.4 启动流程
图2-9展示了Skynet的启动流程。图中①②③步由引擎完成,用户只需在配置文件中指定主服务(表2-1的start项)即可,之后就可以从主服务开始编写程序了。
![](https://epubservercos.yuewen.com/BAD2B3/21097070501733306/epubprivate/OEBPS/Images/2-9.jpg?sign=1738784290-Qj80A3018lsLncUWhvXTCeyxbS5ASmz2-0-ee1e5249ce830dd466a7ca2dbe8cf521)
图2-9 Skynet的启动流程
了解了理论知识,下面开启实践之旅。