不少同学或朋友都问过我,Java做游戏服务器跟Java web有什么不同,趁着这次这个游戏差不多完工,我写了一个服务器架构的文档,当然,每个人都能设计不同的架构,有好的有坏的,我这里给的只是我个人的一种设计,其中哪些设计不合理,还请多指教。由于写文档用的服务器上搭建的showdoc,一种免费的在线文档系统,使用的md,于是我就直接copy到简书来了,不过文档中的敏感信息都处理了,游戏名就不透露啦,服务器的ip端口,账号密码,更是不能透露啦。这里就让那些还不明白游戏服务器的同学们,大致了解下服务器的架构
****服务器架构文档
一、服务器架构图
根据需求,可将服务器大致分为登录服务器、逻辑服务器、文件服务器、支付服务器、国战服务器和聊天服务器
1.服务器间进程通信
服务器之间的进程通信使用json-rpc,json-rpc的底层为短连接实现,通信为json数据格式
2.游戏服务器
服务器\属性 | 外网ip | 内网ip | 端口 | 管理端口 |
---|---|---|---|---|
登录服务器 | 127.0.0.1 | 127.0.0.1 | 0 | 0 |
文件服务器 | 127.0.0.1 | 127.0.0.1 | 0 | 0 |
国战服务器 | 127.0.0.1 | 127.0.0.1 | 0 | 0 |
支付服务器 | 127.0.0.1 | 127.0.0.1 | 0 | 0 |
逻辑服务器 | 127.0.0.1 | 127.0.0.1 | 0 | 0 |
聊天服务器 | 暂无 | 暂无 | 暂无 | 暂无 |
3.Redis服务器集群
服务器\属性 | 外网ip | 内网ip | 端口 | 密码 |
---|---|---|---|---|
Redis Sentinel集群 | 127.0.0.1 | 127.0.0.1 | 0 | 无 |
Redis主服务器1 | 127.0.0.1 | 127.0.0.1 | 0 | 123456 |
Redis从服务器1 | 127.0.0.1 | 127.0.0.1 | 0 | 无 |
Redis主服务器2 | 127.0.0.1 | 127.0.0.1 | 0 | 123456 |
Redis从服务器2 | 127.0.0.1 | 127.0.0.1 | 0 | 无 |
4.Memcache服务器
服务器\属性 | 外网ip | 内网ip | 端口 |
---|---|---|---|
Memcache | 127.0.0.1 | 127.0.0.1 | 0 |
5.MySQL服务器
|服务器\属性|外网代理ip|内网ip|外网端口|账号|密码|
|:——– |:————-|:———–|:—|
|MySQL |无|127.0.0.1|0|root|123456|
- 备注:开发阶段所有服务器部署在同一台物理服务器
二、逻辑服务器系统架构
其中,游戏逻辑服务器的系统架构如下:
- 游戏客户端为Cocos2d,与服务器交互采用Http通信,数据传输采用Json格式字符串
- 服务器端的网络层使用基于Netty实现的Http服务器
- 通过Netty接入客户端请求,根据请求数据中的协议号,调用服务器中相对应的逻辑模块
- 逻辑模块处理消息,若要处理游戏数据则调用Jedis或Hibernate处理,若触发某事件,则调用事件处理器
- 通过Netty的ChannelHandlerContext返回处理结果
- 客户端与服务器交互的数据通过XXTea+Base64进行加密处理
总结如下图:
三、服务器启动
服务器启动顺序如下:
- MySQL服务器
- Memcache服务器
- Redis Sentinel
- Redis Masters
- Redis Slaves
- 登录服务器
- 支付服务器
- 逻辑服务器
- 文件服务器
- 聊天服务器
- 国战服务器