需求说明
棋牌大厅服务器使用Skynet框架
开发环境
- 操作系统
Ubuntu
- 集成开发环境
VSCode
备注:在VSCode
中安装EmmyLua
插件,方便Lua代码编写与调试。
参考资料
项目结构
项目名称为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
运行脚本
-
操作步骤
基础框架搭建
- 创建项目目录
$ mkdir -p game/server/lobby
- 将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核心代码
- 在当前
lobby
文件夹下创建lib
文件夹
$ mkdir -p game/server/lobby/lib
- 将Skynet源码中的
cservice
、luaclib
、lualib
、service
四个文件拷贝到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
- 在项目
lobby
文件夹下创建配置文件夹conf
$ mkdir -p game/server/lobby/conf
- 在配置文件夹
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"
- 在配置文件夹
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"
- 根目录下创建自定义服务
service
文件夹并创建主入口main.lua
文件
$ mkdir service && cd service
$ vim main.lua
local skynet = require "skynet"
skynet.start(function()
skynet.error("server start")
end)
- 启动调试
$ 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启动流程
- 加载配置文件
- 配置文件存入Lua的全局变量
env
中 - 创建和启动C服务的日志
logger
- 启动引导模块并开启第一个Lua服务
bootstrap
未完待续...