Skynet入门(二)
常用接口说明
接口 | 说明 |
---|---|
newservice(name, …) | 启动一个name的新服务,并返回新服务的地址 |
start(func) | 用func初始换服务。编写服务时,都会写一句skynet.start,并在func写一些初始化代码 |
dispatch(type, func | 为type类型的消息设定处理函数func |
send(addr, type, cmd, …) | 向地址为addr的服务发送一条type类型消息,消息名为cmd |
call(addr, type, cmd | 向地址为addr的服务发送一条type类型的消息,并等待对方的回应,为阻塞方法 |
服务器设计
服务
- 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"