服务器架构简图如下:

最后一站源码分析(LastBattle)-服务架构

连线说明:

  • 实线:表示客户端登录流程,①②③④⑤表示登录流程,详细解释见下文。
  • 虚线:表示服务器间的连接,虚线箭头指向监听方。

架构说明:

英文名称 简称 中文名称 功能简介 单个大区需求数量 数量说明
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一个eMsgToBSFromLS_OneClinetLoginCheckRet 消息, BS给该玩家生成一个唯一token并将玩家token信息根据负载均衡策略发送 eMsgToGSFromBS_OneUserLoginToken消息 给目前负载较小的GS来进行登记,登记成功后GS返回其ip和端口等信息 发送 eMsgToBSFromGS_OneUserLoginTokenRet 到BS,进而发送给客户端。
  • :客户端收到GS的ip和端口等信息后,发送登录消息给GS,GS校验token成功后会将登录信息转发给CS,游戏玩家数据实际是在CS上加载并创建玩家实体。到此,玩家登录完成,后续玩家在CS和SS上的操作消息都会通过GS作为中间桥梁和客户端通讯。

相关文章: