Skynet项目搭建

需求说明

棋牌大厅服务器使用Skynet框架

开发环境

  • 操作系统 Ubuntu
  • 集成开发环境 VSCode

备注:在VSCode中安装EmmyLua插件,方便Lua代码编写与调试。

参考资料

  • Skynet环境搭建
  • Skynet配置文件

项目结构

项目名称为lobby表示大厅服务器,文件夹位于game/server/lobby/目录下。

项目目录结构

  • conf 配置文件夹
    • config 主配置文件
    • path 路径配置文件
  • libs Skynet框架类库文件夹
    • luaclib 使用C编写的Skynet库
    • lualib 使用Lua编写的Skynet库
    • cservice 使用C编写的Skynet服务
    • service 使用Lua编写的Skynet服务
  • service 自定义服务
    • main.lua 默认入口主服务
  • bin 启动脚本
    • skynet文件 启动脚本
    • run.sh运行脚本

操作步骤

基础框架搭建

  1. 创建项目目录
$ mkdir -p game/server/lobby
  1. 将Skynet源码根目录下的skynet文件拷贝到lobby文件夹下
$ mkdir -p game/server/lobby/bin
$ mv skynet/skynet game/server/lobby/bin

Skynet目录结构

  • 3rd 第三方代码,包括lua和jemalloc等。
  • lualib 使用Lua编写的库
  • lualib-src 使用C编写并封装给Lua使用的库
  • service 使用Lua编写的服务模块
  • service-src 使用C编写的服务模块
  • skynet-src Skynet核心代码
  1. 在当前lobby文件夹下创建lib文件夹
$ mkdir -p game/server/lobby/lib
  1. 将Skynet源码中的cserviceluacliblualibservice四个文件拷贝到lib文件夹下
$ cp -r skynet/cservice game/server/lobby/lib
$ cp -r skynet/luaclib game/server/lobby/lib
$ cp -r skynet/lualib game/server/lobby/lib
$ cp -r skynet/service game/server/lobby/lib
  1. 在项目lobby文件夹下创建配置文件夹conf
$ mkdir -p game/server/lobby/conf
  1. 在配置文件夹conf下添加路径配置文件config.path
$ vim game/server/lobby/conf/config.path
-- 项目根目录
root = "./"

-- 使用C语言编写的Skynet核心库
lua_cpath = root.."lib/luaclib/?.so"

-- 使用Lua语言编写的Skynet核心库
lua_path = root.."lib/lualib/?.lua;"..root.."lib/lualib/?/init.lua"

-- 使用C语言编写的Skynet核心服务
cpath = root.."lib/cservice/?.so"

-- 使用Lua语言编写的Skynet核心服务与自定义的服务
luaservice = root.."lib/service/?.lua;"..root.."service/?.lua"

lualoader = root.."lib/lualib/loader.lua"
  1. 在配置文件夹conf下添加主配置文件config
$ vim game/server/lobby/conf/config
include "config.path"

-- 启动的第一服务及参数,默认为snlua bootstrap。
-- 表示启动名为bootstrap的Lua服务,即service/bootstrap.lua。
bootstrap = "snlua bootstrap"

-- main script
start = "main"

-- logger
logger = nil
logservice = "logger"
logpath = "."

-- daemon
-- daemon = "skynet.pid"
  1. 根目录下创建自定义服务service文件夹并创建主入口main.lua文件
$ mkdir service && cd service
$ vim main.lua
local skynet = require "skynet"

skynet.start(function() 
    skynet.error("server start")
end)
  1. 启动调试
$ game/server/lobby/bin/skynet conf/config
[:01000002] LAUNCH snlua bootstrap
[:01000003] LAUNCH snlua launcher
[:01000004] LAUNCH snlua garbagecollect
[:01000005] LAUNCH snlua cmaster
[:01000005] master listen socket 0.0.0.0:2013
[:01000006] LAUNCH snlua cslave
[:01000006] slave connect to master 127.0.0.1:2013
[:01000005] connect from 127.0.0.1:49120 4
[:01000007] LAUNCH harbor 1 16777222
[:01000005] Harbor 1 (fd=4) report 127.0.0.1:2526
[:01000006] Waiting for 0 harbors
[:01000006] Shakehand ready
[:01000008] LAUNCH snlua datacenterd
[:01000009] LAUNCH snlua service_mgr
[:0100000a] LAUNCH snlua main
[:0100000a] server start
[:01000002] KILL self

Skynet启动流程

  1. 加载配置文件
  2. 配置文件存入Lua的全局变量env
  3. 创建和启动C服务的日志logger
  4. 启动引导模块并开启第一个Lua服务bootstrap

未完待续...

你可能感兴趣的:(Skynet项目搭建)