skynet game server
RillServer是一套基于skynet的通用游戏服务端框架,适合大作战、棋牌、RPG、策略等多种类型的游戏服务器。设计初衷是为了极大的提高开发效率,减少游戏开发成本。
总要取个名字,Rill小河,喻意服务畅通无阻,亦表积流成海。假以时日,厚积薄发。
如果闲麻烦 有个比较简洁的架构可以玩玩 https://github.com/cloudfreexiao/AntServer
RillServer采用传统c++服务器的架构方案。服务为1:1对应(agent room)
整体架构如下图所示,蓝色方框代表skynet节点,黄色方框代表服务,一个节点会开启game、global、login等多种服务。灰色方框代表gateway的转发范围,即客户端连上某个节点的gateway,该gateway只会将消息转发给该节点下的login和game。
ps: 1、一个节点的gate只会连接该节点的login和game,login和game可以连接跨节点的center、global和dbproxy。 2、暂时未实现cache层。 3、框架尽量不修改skynet代码,以便后续升级,但有些功能需要插入到原来代码里,升级时候务必修改这一部分。这些修改不会涉及核心部分,一般是增加控制台功能。若升级skynet,应该把这一部分抽出来。 skynet/lualib/debug.lua skynet/service/debug_console.lua skynet/service/launcher.lua
入门章节将会介绍开启服务器以及实现echo程序,若还不太熟悉skynet和服务端编程,欢迎参考 游戏研究院 中的文章。
下载代码后需要编程程序,只需要运行目录下的./make.sh all即可。服务端默认使用websocket+json的通信协议。
protobuf协议 只要改配置就能够支持tcp(头两字节代表长度)+protobuf的格式。 服务端使用LuaPbIntf解析protobuf协议,如果使用protobuf协议,需要安装protobuf,具体如下: yum nstall autoconf yum install automake yum install libtool yum install glibc-headers gcc-c++ cd lualib-src/LuaPbIntf/third_party/protobuf ./autogen.sh ./configure CFLAGS="-fPIC" CXXFLAGS="-fPIC" make make install vim /etc/profile,添加 LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib ldconfig
源码中对LuaPbIntf稍有改动,以适应协程下的protobuf编码解码
修改etc/runconfig.lua中的端口号,然后执行./start.sh即可开启一个游戏节点。
具体请参考示例1
bson:bson会把key都存为string,读取时要tonumber处理 由于dataSheet在init阶段初始化,而awake、start在init阶段前执行,修改skynet/lualib/skynet/datasheet/init.lua的querysheet函数,增加if datasheet_svr == nil then datasheet_svr = service.query("datasheet") end
内网改的 tool增加表拷贝 将player相关的都放到player文件夹(new load_data load_all_data save_all_data),改为读取pb结构保存{playerid,pbstr}