All Projects → cloudfreexiao → Rillserver

cloudfreexiao / Rillserver

Licence: mit
skynet game server

Programming Languages

lua
6591 projects

Projects that are alternatives of or similar to Rillserver

Gonet
go分布式服务器,基于内存mmo
Stars: ✭ 804 (+478.42%)
Mutual labels:  game, server
Travian Kingdom
Travian Kingdom server script free. Not finish yet. Abandoned.
Stars: ✭ 74 (-46.76%)
Mutual labels:  game, server
Game Server
Distributed Java game server, including cluster management server, gateway server, hall server, game logic server, background monitoring server and a running web version of fishing. State machine, behavior tree, A* pathfinding, navigation mesh and other AI tools
Stars: ✭ 916 (+558.99%)
Mutual labels:  game, server
Einx
a framework in golang for game server or app server
Stars: ✭ 376 (+170.5%)
Mutual labels:  game, server
Gdk For Unity Fps Starter Project
SpatialOS GDK for Unity FPS Starter Project
Stars: ✭ 119 (-14.39%)
Mutual labels:  game, server
Gameproject3
游戏服务器框架,网络层分别用SocketAPI、Boost Asio、Libuv三种方式实现, 框架内使用共享内存,无锁队列,对象池,内存池来提高服务器性能。还包含一个不断完善的Unity 3D客户端,客户端含大量完整资源,坐骑,宠物,伙伴,装备, 这些均己实现上阵和穿戴, 并可进入副本战斗,多人玩法也己实现, 持续开发中。
Stars: ✭ 655 (+371.22%)
Mutual labels:  game, server
Racingworld
💥 A multiplayer online 3D game about racing 💥
Stars: ✭ 50 (-64.03%)
Mutual labels:  game, server
Flying Squid
Create Minecraft servers with a powerful, stable, and high level JavaScript API.
Stars: ✭ 311 (+123.74%)
Mutual labels:  game, server
Mmo Server
Distributed Java game server, including login, gateway, game demo
Stars: ✭ 114 (-17.99%)
Mutual labels:  game, server
Openrct2
An open source re-implementation of RollerCoaster Tycoon 2 🎢
Stars: ✭ 10,115 (+7176.98%)
Mutual labels:  game, server
Cellnet
High performance, simple, extensible golang open source network library
Stars: ✭ 3,714 (+2571.94%)
Mutual labels:  game, server
Sgf
This is a Smart Game Foundation (Not Framework)
Stars: ✭ 122 (-12.23%)
Mutual labels:  game, server
Summer
这是一个支持分布式和集群的java游戏服务器框架,可用于开发棋牌、回合制等游戏。基于netty实现高性能通讯,支持tcp、http、websocket等协议。支持消息加解密、攻击拦截、黑白名单机制。封装了redis缓存、mysql数据库的连接与使用。轻量级,便于上手。
Stars: ✭ 336 (+141.73%)
Mutual labels:  game, server
Casino Server
🔥 An online poker game server powered by Redis, node.js and socket.io
Stars: ✭ 721 (+418.71%)
Mutual labels:  game, server
Gameservers Docker
A bunch of game servers I use, dockerised
Stars: ✭ 322 (+131.65%)
Mutual labels:  game, server
Forgottenserver
A free and open-source MMORPG server emulator written in C++
Stars: ✭ 1,024 (+636.69%)
Mutual labels:  game, server
Gdk For Unity
SpatialOS GDK for Unity
Stars: ✭ 296 (+112.95%)
Mutual labels:  game, server
Mmorpg
springboot编写的轻量级高性能mmorpg手游服务端框架,基本功能逐渐完善中。
Stars: ✭ 309 (+122.3%)
Mutual labels:  game, server
Azerothcore Wotlk
Complete Open Source and Modular solution for MMO
Stars: ✭ 1,330 (+856.83%)
Mutual labels:  game, server
Ipokemon Server
iPokeMon Server.
Stars: ✭ 119 (-14.39%)
Mutual labels:  game, server

RillServer

RillServer是一套基于skynet的通用游戏服务端框架,适合大作战、棋牌、RPG、策略等多种类型的游戏服务器。设计初衷是为了极大的提高开发效率,减少游戏开发成本。

总要取个名字,Rill小河,喻意服务畅通无阻,亦表积流成海。假以时日,厚积薄发。

如果闲麻烦 有个比较简洁的架构可以玩玩 https://github.com/cloudfreexiao/AntServer

整体架构

RillServer采用传统c++服务器的架构方案。服务为1:1对应(agent room)

架构图

整体架构如下图所示,蓝色方框代表skynet节点,黄色方框代表服务,一个节点会开启game、global、login等多种服务。灰色方框代表gateway的转发范围,即客户端连上某个节点的gateway,该gateway只会将消息转发给该节点下的login和game。 Alt text

各个服务的功能:

  • gateway:门,客户端只连接gateway,如果玩家尚未登录,gateway会把消息发给login,如果登录成功会转发给game
  • login:登录服,处理登录逻辑
  • game:游戏服,处理玩家逻辑
  • center:中心服,记录玩家登录状态等信息
  • global 全局服,可在此实现跨服战等功能
  • dbproxy:数据库代理,使用服务不直接操作数据库,只操作dbproxy
  • host:主机,用于集群控制,如热更新、关服,以及web

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

文件目录

  • config:策划配置文件夹
  • etc:服务配置文件夹
  • luaclib:一些c模块, .so文件
  • lualib:lua模块
  • lualib-src:c模块代码
  • mod:游戏逻辑模块
  • proto:protobuf文件,若使用pb协议需要把proto文件放在里面
  • run:记录pid等信息
  • service:服务入口地址,服务开启后会读取mod里对应模块
  • skynet:skynet框架,这里尽量少改动它,以便后续更新
  • test:例子

入门

入门章节将会介绍开启服务器以及实现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即可开启一个游戏节点。

echo

具体请参考示例1


示例

  • 示例1 echo 服务端./start_node1.sh 即可运行服务端(单阶段) 客户端 cd test ../skynet/3rd/lua/lua 1-echo.lua
  • 示例2 name
    数据库保存测试
  • 示例3 chat
  • 示例4 movegame
  • 示例5 读配置
  • 示例6 日志
  • 示例7 代码热更新,配置热更新
  • 示例8 排行榜 排行榜查询次数的排行榜,演示global保存数据
  • 示例9 数据库断线重连 使用示例1登录,关闭数据库,测试,重开数据库,测试
  • 示例10 关服功能
  • 示例11 pb协议
  • 示例12 xx大作战

可以改进

  • [优化] 监视功能
  • [测试] 性能测试
  • [优化] game改成agentpool那样的,按需开启
  • [优化] 玩家存储:加一层redis
  • [必须] web鉴权
  • [必须] 未测试 mongodb 修改成mysqldb的形式。
  • [优化] web单独提取
  • [优化] 提取修改skynet的部分,不要修改skynet所有源码
  • [优化] log功能
  • [优化] 同一账号快速登录会出现问题
  • [bug] watch game列表,recmmad列表(可能出错)
  • [bug] 大作战高并发下,不发送sync协议

已经发现的注意点

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}

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].