文章目录
简介
一个基于棋牌、MMORPG游戏的分布式java游戏服务器,理论上可以无限水平扩展网关服,大厅服、游戏服达到人数承载。实现了集群注册中心,网关、登陆、后台服务器监控等通用服务器;封装了redis集群、mongodb等数据库处理;封装了消息队列、线程模型、及导表等常用工具类。网关服务器使用mina封装了TCP、UDP、WebSocket、HTTP通信,使该框架能同时支持多种协议的客户端进行游戏。每个以scripts名字结尾的目录都为相应项目的脚本文件。GitHub地址
一、相关技术
1.开发工具
1.Eclipse作为游戏主要开发工具,使用IntelliJ IDEA作为Web开发工具,Netbeans开发GUI程序。
2.maven构建打包项目
3.JDK1.8
4.jenkins持续集成工具,进行项目自动打包部署
2.通信
1.Mina作为主要通信模块,完成TCP、UDP、HTTP、WebSocket通信
2.Netty作为可选通信,只实现TCP客户端连接其他服务器
3.ProtoBuff、json
3.数据存储
1.Redis集群作为数据主要存储,封装了Jedis和Redisson连接客户端。
2.Mongodb作为辅助存储,数据备份,配置表存储等。
3.FastJson拥有数据的序列化与反序列化。
4.Web
1.Bootstrap、JQuery、HTML5
2.SpringMVC
3.FreeMarker
5.消息中间件
1.ActiveMQ
2.Redis 订阅发布
二、架构原理
此架构根据单区的棋牌游戏进行架构,同样也适用于分区分服的MMO类游戏。内部服务器统一使用TCP进行通信,同时每个游戏预留HTTP通信接口,用于管理员或用户进行调用。服务器主要模块分为:
- 注册中心 game-cluster
- 网关服 game-gate
- 大厅服 game-hall
- 日志服 game-log
- 充值服 game-billing
- 后台监控服 game-manage
- 游戏服 game-bydr(示例)
1.注册中心 game-cluster
注册中心管理所有运行的游戏服务器,当其他网关服,游戏服等启动时自动连接注册中心,然后定时发送各自服务器的状态信息,用于管理监控各个服务器的状态。由于游戏服务器数量有限和注册中心宕机仍然不影响游戏的正常运行,因此注册中心设计为单服务器。主要功能为:
- 管理游戏服务器的配置,如IP、端口,状态维护。
- 实现网关服务器的负载均衡。
- 子游戏从注册中心获取可连接的网关,日志,充值等服务器进行网络连接
- 游戏客户端通过HTTP请求获取可以连接网关服务器
- 后台web监控服务器从此服务器获取所有服务器信息,用于展示及管理(如设置服务器状态为维护,暂停对外提供服务)
2. 网关服 game-gate
网关服封装了TCP、UDP、WebSocket连接通信,游戏前端可以通过任意协议进行连接,一个客户端可同时Tcp和Udp进行连接。添加UDP主要目是在弱网条件下提高通信质量。主要功能为:
- 转发玩家消息到大厅服和游戏服。
- 维护用户连接状态,玩家切换游戏。
3.大厅服 game-hall
大厅服主要完成公用逻辑,如登录,聊天,公会,邮件等。
4.日志服 game-log
存储业务日志,单独提出来主要目的是提高游戏服的承载量,和后台日志开发部门所提供的sdk分离。
5.充值服 game-billing
待完善
6. 后台监控服 game-manage
监控服务器运行状态和对服务器进行操作,是一个独立的web项目,所有数据通过HTTP向注册中心进行获取,主要功能:
- 图表显示服务器列表,内存等信息
- GM操作,关闭服务器,设置服务器状态,重载脚本,更新配置表等
- 一个封装好的WebSocket+Protobuf+H5网页游戏客户端,用于自行调试消息逻辑是否正确(如捕鱼游戏客户端)
7. 游戏服 game-bydr
一个独立的捕鱼DEMO游戏,公用数据直接从redis中获取