分类 编程.游戏开发 中的文章

Lastbattle | 游戏场景服务器SS解析

游戏场景服务器概况

5658cf3a9b5eba8535a6e556dbe7da34.png

指令对应的处理handle的文件:SSBattleMgr.cpp

创建战场

  • 指令: eMsgToSSFromCS_CreateBattle
  • GC服务器发往SS fromCS 收到中心服务器CS创建站场的指令,在函数INT32 CSSBattleMgr::OnMsgFromCS_CreateBattle(const char* pData, int n32DataLength)中创建站场成功后,加入到战场管理器中:
m_cAllBattleMap[pBattle->GetBattleID()] = pBattle;

发送创建结果给CS服务器

……

阅读全文

LastBattle | 登录流程(LS & BS & GS)

登录流程

根据上一篇文章中的登录流程,我在工程中找到了相应的代码并记录了下来

登录服务代码解析

监听端口:49997 供BS服务连接
监听端口:49996 供客户端连接

CIocpCtrl:IOCP控制类

多线程循环查询IOCP内部的网络事件,并分派处理.这里多个工作线程仅仅是将所有的网络事件放入循环
内部将创建2 * CPU个工作线程(Worker Item).
多线程调用函数

……

阅读全文

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|根据实际需求配置

……

阅读全文