服务器架构简图如下:
连线说明:
- 实线:表示客户端登录流程,①②③④⑤表示登录流程,详细解释见下文。
- 虚线:表示服务器间的连接,虚线箭头指向监听方。
架构说明:
英文名称 | 简称 | 中文名称 | 功能简介 | 单个大区需求数量 | 数量说明 |
---|---|---|---|---|---|
GameClient | GC | 游戏客户端 | 不解释 | n | 不超服务器承载上限均可 |
LoginSer | LS | 游戏登录服务器 | 用于登录验证的服务器 | 1 | 登录入口仅需一个 |
GateSer | GS | 游戏网关服务器 | 用于客户端与其场景服和中心服通讯的转接 | n | 根据客户端连接数量调整 |
BalanceSer | BS | 游戏负载均衡服务器 | 用于负载均衡,给客户端分配合理的网关服,其上连接多台GS | n | 根据实际需求配置 |
SceneSer | SS | 游戏场景服务器 | 用于游戏战斗的服务器 | n | 根据实际需求配置 |
CentralSer | CS | 游戏中心服务器 | 用于玩家数据管理,匹配等核心功能服务器 | 1 | 统一管理玩家数据 |
LogSer | 游戏日志服务器 | 用于游戏日志收集 | 1 | 统一日志收集 | |
UserRedis | 游戏玩家数据缓存服务器 | 用于缓存玩家数据 | 1 | 统一数据缓存 | |
LogicRedis | 游戏逻辑数据缓存服务器 | 用于缓存游戏数据 | 1 | 统一数据缓存 | |
MySql | 游戏数据库 | 用于持久化游戏及玩家数据 | 1 | 统一数据存储 | |
Remote | 游戏远程控制端 | 用于输入gm命令等远程控制 | n | 根据实际需求配置 |
登录流程:
- ①②:客户端发送消息AskLogin到LS,LS根据客户端登录类型生成相应的url,通过消息队列m_SDKCallbackQueue发送给子线程调用url来获取登录验证结果,子线程将url返回结果通过消息队列m_DBCallbackQueue发送给主线程,根据返回结果将BS列表发送给客户端。ps:这块需要了解boost库和liburl库的基本用法
- ③④:客户端收到LS返回的BS服务器列表后,选择其中一台BS发送消息eMsgToBSFromGC_OneClientLogin,BS收到该消息后会向LS发消息eMsgToLSFromBC_OneClinetLoginCheck来进行身份验证,验证通过后会通知客户端登录成功,同时BS给该玩家生成一个唯一token并将玩家token信息根据负载均衡策略发送给目前负载较小的GS来进行登记,登记成功后GS返回其ip和端口等信息到BS,进而发送给客户端。
- ⑤:客户端收到GS的ip和端口等信息后,发送登录消息给GS,GS校验token成功后会将登录信息转发给CS,游戏玩家数据实际是在CS上加载并创建玩家实体。到此,玩家登录完成,后续玩家在CS和SS上的操作消息都会通过GS作为中间桥梁和客户端通讯。
中心服CS:
最后一战(LastBattle)服务器源码分析二——中心服务器(CentralServer)
场景服SS:
最后一战(LastBattle)服务器源码分析三——场景服务器(SceneServer)