服务器架构简图如下:

连线说明:

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

架构说明:

|英文名称|简称|中文名称|功能简介|单个大区需求数量|数量说明 |—— |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作为中间桥梁和客户端通讯。

--完--