Skynet服务端框架搭建2-目录结构配置

Skynet服务端框架搭建2-目录结构配置

通过前面几篇Skynet的小demo也大概清楚了skynet框架的使用方法,现在将skynet放在整个项目中我们就不能还在原来的框架里修改了,要重新设计文件结构

目录结构

[root@feng1 game_demo]# ll
total 20
drwxr-xr-x  2 root root 4096 Oct 28 15:52 etc	--这里我们存放服务配置的文件夹
drwxr-xr-x  2 root root 4096 Oct 28 15:52 luaclib	--存放一些C模块(.so文件)
drwxr-xr-x  2 root root 4096 Oct 28 15:52 lualib	--存放Lua模块
drwxr-xr-x  8 root root 4096 Oct 28 15:54 service	--存放各服务的Lua代码
drwxr-xr-x 11 root root 4096 Oct 28 15:50 skynet	--skynet框架本体,这里我们不会改动他,如果框架又更新直接更新这个文件夹即可
-rw-r--r--  1 root root    0 Oct 28 15:53 start.sh	--启动脚本
[root@feng1 game_demo]# tree -L 2
.
├── etc
├── luaclib
├── lualib
├── service			--service中的服务结构对应上一篇
│   ├── agent
│   ├── agentmgr
│   ├── gateway
│   ├── login
│   ├── main.lua
│   ├── nodemgr
│   └── scene
├── skynet
│   ├── 3rd
│   ├── examples
│   ├── HISTORY.md
│   ├── LICENSE
│   ├── lualib
│   ├── lualib-src
│   ├── Makefile
│   ├── platform.mk
│   ├── README.md
│   ├── service
│   ├── service-src
│   ├── skynet-src
│   └── test
└── start.sh

19 directories, 7 files
[root@feng1 game_demo]# 

因为我们更改了目录结构所以需要重新编写Skynet的配置文件,让Skynet可以加载到各模块代码,在etc下新建config.node1和config.node2,表示两个节点的配置

注意这里配置文件的路径都是基于start.sh的当前路径来写的

skynet配置文件

config.node1
--必须配置
thread = 8                          --启用多少个工作线程
cpath = "./skynet/cservice/?.so"    --用C编写的服务模块的位置
bootstrap = "snlua bootstrap"       --启动的第一个服务

--bootstrap配置项
start = "main"                      --主程序入口
harbor = 0                          --不使用主从节点模式

--lua配置项
lualoader = "./skynet/lualib/loader.lua"
luaservice = "./service/?.lua;" .."./service/?/init.lua;".. "./skynet/service/?.lua;"
lua_path = "./etc/?.lua;" .. "./lualib/?.lua;" ..  "./skynet/lualib/?.lua;" .. "./skynet/lualib/?/init.lua"
lua_cpath = "./luaclib/?.so;" .. "./skynet/luaclib/?.so"

--后台模式
--daemon = "./skynet.pid"
--logger = "./userlog"

--节点
node = "node1"

跟之前的配置文件差别不大,主要是因为我们skynet的框架单独放进了一个文件夹,所以要改动path、lualoader、luaservice、lua_path、lua_cpath的路径,我们自己写的服务也放在了service文件夹下,所以要修改luaservice配置项,"./service/?.lua;“会查找service下所有××.lua的文件,而”./service/?/init.lua;“失去找启动文件,如果都没找到,最后才去找skynet本身的文件”./skynet/service/?.lua;"

最后自定义环境变量node(表示节点名),因为使用了多节点所以开启了harbor(集群模式cluster)

主服务还是main,到时候我们在service下写一个main.lua作为主服务即可,再创建一个config.node2和1一致,就是最后节点名不一样,为node2

主服务文件

service/main.lua
local skynet = require "skynet"

skynet.start(function()
    --初始化
    skynet.error("[start main]")
    --退出自身
    skynet.exit()
end)

先配置一个最简单的主服务,让整个系统能启动并且退出,并打印"[start main]",供我们测试整个系统的路径结构是否有问题

启动脚本

关于shell脚本的知识我没专门总结过用法,毕竟我也只是看的懂,会用简单的,sh脚本还是每个程序员必备的技能了,大家最好也要到会看会写一些基本的水平,这里我们脚本很简单,只是把我们之前./skynet ××config的过程配置进来,我们每次调用脚本启动即可

start.sh
./skynet/skynet ./etc/config.node$1

我们在start.sh目录下调用

sh start.sh 1

启动一下,可以发现运行成功了,如果我们需要启动2,只需要把参数改成2就行了

image-20211029113626168

服务配置

虽然我们只是简单配置了节点1节点2,但还是需要一个配置文件来规范我们各个节点之间的服务是如何通信的,端口也需要配置

ets/runconfig.lua
return {
    --集群
    cluster = {
		  node1 = "127.0.0.1:7771", 
		  node2 = "127.0.0.1:7772",
    },
    --agentmgr
    agentmgr = { node = "node1" },
    --scene
    scene = {
      node1 = {1001, 1002},  
      --node2 = {1003},
    },
    --节点1
    node1 = {
        gateway = {
          [1] = {port=8001},
          [2] = {port=8002},
        },
        login = {
            [1] = {},
            [2] = {},
        },
    },

    --节点2
    node2 = {
        gateway = {
          [1] = {port=8011},
          [2] = {port=8022},
        },
        login = {
            [1] = {},
            [2] = {},
        },
    },
}

配置文件虽然长,但各个功能都很明了,

  • 比如node1地址为127.0.0.1:7771 ,node2则是127.0.0.1:7772,
  • agentmgr全局唯一的服务属于节点1
  • scene则是在节点1开启1001和1002的两个战斗场景
  • node1和node2描述了各节点的本地服务,两个节点分别开启了两个gateway和两个login,节点1的两个gateway监听8001和8002,而2节点则是8011和8012

image-20211029112917344

如何读取该配置文件呢?

./service/main.lua
local skynet = require "skynet"

skynet.start(function()
    --初始化
    skynet.error("[start main]")
    skynet.error(runconfig.agentmgr.node)
    --退出自身
    skynet.exit()
end)

使用runconfig.agentmgr.node即可拿到runconfig中agentmgr类里的node名,在编译器中也会有代码提示,表示取到了

image-20211029113205530

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

上上签i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值