Skip to content

可用作全球同服或滚服的分布式Java游戏服务器框架,附带若干实用工具和游戏客户端

Notifications You must be signed in to change notification settings

ricashao/ServerFramework

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ServerFramework

它是什么?

是可用作全球同服或滚服的分布式Java游戏服务器框架,附带若干实用工具和游戏客户端。与客户端通讯使用Netty框架,采用WebSocket,适合手游和H5游戏(如微信小游戏),也可以简单修改转而使用Socket等。框架中的服务器类型分为GM服务器(GM)、逻辑服务器(LogicServer)、战斗服务器(BattleServer)、网关服务器(Gateway),服务器之间的通讯使用Akka框架,处理服务器并发问题,也是利用Akka框架的Actor模型思想

为什么要做它并开源它?

入行至今,很高兴能作为游戏制作人和后端主程序,做了两款原创玩法的策略竞技游戏《萌猪突击》《卡牌串串》。我热爱需要动脑的游戏类型(比如CCG、DBG、解谜、桌游等),更喜欢创新最好是全新玩法的游戏。虽然行业的同质化现象越来越严重,抄袭屡见不鲜,“微创新”成为至理名言。但近年来,TapTap上涌现出越来越多的个人或几人的小团队,在不断推出原创玩法的新颖游戏。他们都有着做原创好游戏的理想,有些朋友甚至为了实现游戏,从完全不相干的行业中跳出来,从0开始自己学习编程来实现。但技术上毕竟是不能一蹴而就的,于是开测即炸服基本成了小团队发布游戏的现状,而炸服并不是由于玩家热情太高,涌入访客太大,很大程度上还是技术方面不过关,几百甚至几十的在线,都会出现服务器明显卡顿的问题。相比之下,程序bug相对成熟团队也多太多。所以,我想将我做这两款游戏时所用的服务器框架进行重新整理和开源,希望尽一份微薄之力,能帮助想做原创游戏,但被技术方面问题困扰的战友们。希望这个框架能简化服务器的开发,让大家更专注于游戏玩法的实现,而不是头疼于服务器框架的搭建

交流与反馈

我的QQ及对应邮箱是:2246549866@qq.com 我所有开源项目的反馈交流QQ群为:132108644 (含之前XlsxToLua、国际化工具等)
由于本人能力有限,如果您对这个框架有任何改进建议,期待您能不吝赐教

服务器框架介绍(其他细节参看doc目录下的“说明.txt”,之后会有更详细的Wiki)

服务器功能说明

GM服务器(GM):

1、作为中心管理的服务器,其他各类服务器在启动后,需要连接GM服务器进行注册(类似自己实现了一个精简够用的ZooKeeper)。2、游戏客户端要连上游戏服务器时,先访问GM服务器,获取一个最空闲的Gateway服务器地址。3、GM客户端通过登录验证后,向GM服务器发送命令,由GM服务器管理其他指定服务器执行具体GM命令(比如对线上服务器进行表格更新、停服维护操作,对指定玩家或系统模块执行GM操作,修改各项数据等)

逻辑服务器(LogicServer):

处理游戏逻辑相关的请求,其中需要指定一台为主逻辑服务器,只有主逻辑服务器处理玩家注册、游戏对战匹配。其他逻辑服务器可以有若干台,支持分布式扩展

战斗服务器(BattleServer):

处理游戏对战相关的请求,可以有若干台,支持分布式扩展

网关服务器(Gateway):

由客户端进行连接,根据负载分配给玩家连接的逻辑服务器。将客户端请求根据类型分别发往对应逻辑服务器或战斗服务器,可以有若干台,支持分布式扩展

数据存储

因为在数据存储上不同开发者的使用习惯往往很不相同,不同类型游戏的数据存储需求也不同,本框架这一部分仅采用Redis作为中心数据库演示服务器框架的作用,各位开发者可根据具体需求进行替换

通讯协议

客户端与服务器间的二进制通讯数据包:
第1个4字节(1个int)为整个数据包的总字节数(含所有部分,包括这4字节)
第2个4字节为协议名对应的数字
第3个4字节为errorCode对应的数字
剩下的部分为要发送的具体protobuf协议转为的二进制内容
其中errorCode为客户端与服务器约定的已知错误码,如果客户端向服务器所发请求,经过服务器验证认为有误,服务器会返回对应错误码给客户端。客户端与服务器具体请求与回应或是推送的内容,通过protobuf协议进行定义,并最终转为字节流发送

提供的样例

目前框架中,除了实现各服务器间通讯协作的基本框架功能以外,还实现了一些具体功能为您提供参考
1、玩家注册、登录,通过主服务器进行对战匹配,2个玩家匹配成功后,进行回合制的实时PVP的井字棋对战
2、GM功能,控制各个服务器执行比如重载表格、关服维护等操作。也可以查看在线玩家详情

附带开源工具及客户端介绍

RedisDataViewer:

虽然市面上有一些第三方的Redis可视化查询操作工具,但一是筛选功能比较弱,比如对ZSet类型,无法限定查询指定index范围内或者指定分数范围内的数据,二是对于存储的protobuf类型转为的二进制数据,没有提供进行反序列化为可读文本查看的功能。因此,我做了这个工具解决上面2个问题。对Hash、List、ZSet均提供具体查询功能,对protobuf序列化存储的数据,可以反序列化为可读文本查看
使用方法:在“redisKeyConfig.txt”配置文件中,根据格式要求(唯一id@分组(不分组则留空)@描述@key名格式@protobuf数据所对应的protobuf类名(非protobuf数据留空)@redis的数据类型(string、hash、list、set、zset)@备注信息)进行配置。就可以在打开工具时,选择这些配置对应的Redis数据进行查看。另外,默认配置文件中,已经将服务器框架中所用到的所有Redis数据都进行了配置登记,可以直接使用,也作为配置的实例供您参考



TestServerFramework(游戏客户端实现)

用C#.NET做的WinForm程序,实现了游戏客户端(井字棋)功能

GameManager:

用C#.NET做的WinForm程序,实现了GM客户端,可管理服务器执行GM命令,查询在线玩家详情


自动编译打包及运行

在trunk\tools\release\AutoBuildServer中,执行“build.bat”可自动将所有类型的服务器通过Maven进行打包(需提前安装并配置好Maven的环境变量)执行“onekey run.bat”可自动启动Redis数据库并启动各个服务器

其他说明

protobuf的编译

在trunk\proto中执行“compile.bat”,可编译服务器所需Java版本的protobuf以及客户端工具所需的C#版本。另外,通过“编译使用proto的工具.bat”,会调用Visual Studio将全部客户端工具重新编译为可执行程序

配置表格的使用

在trunk\tableConfig下放置所需的配置表格。导表工具使用我开源的XlsxToLua(具体使用方法请移步查看),导出路径和参数等已经做好了默认配置

About

可用作全球同服或滚服的分布式Java游戏服务器框架,附带若干实用工具和游戏客户端

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 99.8%
  • Batchfile 0.2%