Skynet入门(二)
服务器设计
服务
- agent:负责玩家的数据加载、数据存储、单服逻辑的处理。为了性能考虑,agent必须跟客户端*连接的gateway处于同一个节点。
- agentmngr:管理agent的服务,它记录每个agent所在的节点,避免不同客户端登录同个账号
- gateway:网关,用于处理客户端连接。
- 好处:
- 隔离客户端和服务端,如果客户端协议调整,那么只需要更改gateway即可。
- 预留了断线重连功能,即使客户端断线,只影响gateway。
- 坏处:
- 由于多加了一层转发协议,必定带来一定的延迟。将gateway、login、agent置于同一节点,有助于减少延迟。
- 好处:
目录结构设计
- etc:存放服务配置文件
- luaclib:存放一些C模块(.so文件)
- service:存放业务服务的Lua代码
- skynet:skynet框架
- start.sh:启动服务器的脚本
如何将service的代码注册到skynet中,使其可以被skynet寻找到
在配置文件的luaservice配置项中增加service的路径
--必须配置
thread = 8 --启用多少个工作线程
cpath = "./skynet/cservice/?.so" --用C编写的服务模块的位置
bootstrap = "snlua bootstrap" --启动的第一个服务
--bootstrap配置项
start = "main" --主程序入口
harbor = 0 --使用cluster集群模式,不使用主从节点模式
--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"