1. 架构介绍
游戏具有强交互性、高实时性,所以要求延时在200ms以内;且用户众多,需要服务器具有高负载量。解决负载问题,其中一个解决方案可以是将游戏大区分区,把用户分到各个区中,每个区采用分布式服务器群组,再将用户分配到各个服务器中。
从宏观看,游戏大区的分区可以是:
从微观上,每个大区内部架构:
1. 超级管理服务器 SuperServer
所有服务器的管理者,所有服务器都与之连接,管理、监控各个服务器运行状况。
2. 网关服务器 GatewayServer
与客户端直接连接,将客户端发送的消息转发给各个服务器,游戏逻辑不参与处理,只处理一部分九屏逻辑(会有一篇专门学习)。支持多台服务器,游戏进程是多线程处理。
3. 功能服务器 FunctionServer
单点服务器,进程主逻辑是单线程的,会处理单区全局类数据。比如家族、帮会、国家、排行榜、战争等数据。
4. 场景服务器 ScenesServer
支持多台服务器,进程主逻辑是单线程的,处理玩家个人数据,以及地图上显示数据(九屏数据、玩家移动、玩家PK、玩家包裹、道具、NPC显示、任务系统等)。
5. 档案服务器 RecordServer
单点服务器,进程主逻辑是单线程的,将游戏数据写入DB库,处理游戏数据加载和存储,读写数据库。
6. 区公共服务器
- infoServer(信息收集服务器):采集各个游戏区游戏数据
- RoleChangeServer(角色跨区处理服务器):处理角色跨区相关功能
- NameServer(角色名管理服务器):处理角色名唯一。
- MonitorServer(监控服务器):监控各个游戏区运行状况。
- PlatformServer(平台服务器):登陆相关,验证客户端账号密码。
2. 服务器启动流程
①启动SuperServer,等待其他服务器与之连接
②启动RecordServer,预加载一些数据库数据,启动完毕后与SuperServer建立连接
③启动SessionServer,启动完毕后与SuperServer、RecordServer建立连接
④启动ScenesServer,启动完毕后与SuperServer、RecordServer、SessionServer建立连接
⑤启动GatewayServer,启动完毕后与SuperServer、RecordServer、SessionServer、ScenesServer建立连接
3. 客户端登录流程
- 客户端首先会向服务器区列表发送http请求,获取最近的服务器列表信息
- 列表信息包含:区名、区id、新区标示、平台登陆地址等等
- 每个区的SuperServer实时向平台验证服务器推送该区每个网关在线人数,以便平台中心给客户端分配最优的登陆网关
- 客户端发送账号密码以及要登陆的区ID去平台验证,验证通过则获得平台返回的登录token,以及登陆区的网关地址
- 同时平台通知对应游戏区,该玩家将在这台网关服务器登陆,也给该网关同步发送验证token
- 客户端收到平台服返回的网关地址,然后去连接网关服务器,并发送token
- 此时网关也收到了平台发来的token信息,和客户端发来的token一起比对,验证通过则允许客户端继续连接,同时也向档案服务器发送消息查询该玩家是否有角色信息,如果有则发送角色基本数据给客户端,如果没有则告诉客户端新建角色
- 当客户端选择一个角色进行登录的时候,则网关发消息到会话服务器创建SessionUser,创建成功则会话发送消息到场景服务器创建ScenesUser,场景则会向档案服务器获取玩家详细数据,创建成功后返回给网关玩家详细数据,再推送给客户端显示出来,此时登录流程结束。