一个简单的自定义服务器
1.先写一个启动脚本start.sh
为了管理方便,我统一把配置放到config目录(这里的后缀名并没有什么大关系)。
建立一个script目录放逻辑代码,一个service目录放服务器代码。
# 每次启动前最好都刷下proto,然后再启动skynet
cd proto && ./genpb.sh && cd ..
cd ../skynet
./skynet ../game/config/game.cfg
2.编辑配置(参考Skynet下面的examples/config)
在我们的config目录下建立一个game.cfg的文件
因为我们每次运行服务器都是进入game目录下执行脚本所以我们要以game作为相对目录(../为返回上一层)
很多参数我们暂时不需要关注,具体看wiki
-- 这里是因为之前我们的start.sh已经进入了skynet的目录了,所以当前目录为skynet目录
root = "../game/"
thread = 8
logger = nil
logpath = "."
harbor = 1
address = "127.0.0.1:2526"
master = "127.0.0.1:2013"
start = "main" -- main script
bootstrap = "snlua bootstrap" -- The service for bootstrap
standalone = "0.0.0.0:2013"
-- 这里的路径一定要注意,我们需要用到skynet service下的代码,也用到我们自己service代码,注意每个路径后面要用;来分割
luaservice = "./lualib/?.lua;".."./service/?.lua;"..root.."script/?.lua;"..root.."service/?.lua;"
lualoader = "./lualib/loader.lua"
lua_path = "./lualib/?.lua;"..root.."script/?.lua;"..root.."lualib/?.lua;"
lua_cpath = "./luaclib/?.so;"..root.."luaclib/?.so;"
-- preload = "./examples/preload.lua" -- run preload.lua before every lua service run
snax = root.."script/?.lua;"
-- snax_interface_g = "snax_g"
cpath = "./cservice/?.so;".."./luaclib/?.so;"..root.."luaclib/?.so;"
-- daemon = "./skynet.pid"
3.编写服务器主函数(参考Skynet下面的examples/main)
建立一个main.lua放到service目录,同时也要把examples/watchdog这个文件拷贝过去(这个顾名思义就是看门狗的意思,每次连接都需要通过Ta来进行消息分发),里面内容跟examples下的main差不多,我主要是把一些不需要的给干掉了。
local skynet = require "skynet"
local max_client = 64
skynet.start(function()
skynet.error("Server start")
local watchdog = skynet.newservice("watchdog")
skynet.call(watchdog, "lua", "start", {
port = 8888,
maxclient = max_client,
nodelay = true,
})
skynet.error("Watchdog listen on", 8888)
skynet.exit()
end)
根据上面的代码我们很容易知道,这个服务端的本地访问地址是127.0.0.1:8888。
现在应该就可以启动一下,看下我们之前的修改有没问题~
cd 到server/game/
sudo ./start.sh
这里我们不需要关注太多,底层相关的和配置相关的的问题,我们要做得的仅仅是把这个服务器搭起来就够了,然后可以投入开发,云风开发这个引擎,相当一部分想法应该也是让开发者可以无需太关注底层,而进行服务端开发。
这次的源码:
http://pan.baidu.com/s/1boGrZcV
建立在上一篇文章的基础上。
直接覆盖game文件夹就好。