KBEngine源码剖析1——角色账号登录和管理

本文详细分析了KBEngine(CBE)源码中的角色账号登录流程,包括登录时序图、各组件间通信以及防重入处理。在流程中,Client向Loginapp发起请求,Loginapp验证账号合法性并调用Dbmgr进行数据库查询。Dbmgr使用线程池处理SQL交互,确保高效率。Baseappmgr负责负载均衡,选择合适的Baseapp进程处理账号信息。最终,Loginapp将Baseapp信息反馈给Client,完成登录过程。
摘要由CSDN通过智能技术生成

文章目录
写在前面
登录时序图
流程分析
胡言乱语
写在前面
这个系列的博客,主要记录自己看CBE(原名KBE)源码的一些阅读笔记和心得,个人在看源码前比较喜欢先那那套源码做出个有可见性效果的产品demo来,然后根据demo在逐渐深入源码,所以在此之前先做了个联机版坦克大战,想先看看CBE怎么做游戏服务器的具体业务功能的,可以先瞅瞅之前的那三篇博客。
基于ComblockEngine+Unity的联机版坦克大战(一)
基于ComblockEngine+Unity的联机版坦克大战(二)
基于ComblockEngine+Unity的联机版坦克大战(三)

我主要是为了看源码,实现,所以后续的博客,我应该都主要写自己的源码阅读情况了~


登录时序图
先贴上一张新账号登录的时序图。

流程分析
一次登陆请求,从客户端发起,到服务器响应,涉及到至少5个进程间的交互通信。

Client最先向Loginapp发起登录请求
具体代码参见Loginapp::login
Loginapp会对账号名、消息包体数据做基本的合法性验证。
由于在之后的流程中需要dbmgr来完成角色数据从db的读取,以及baseappmgr和baseapp的响应,所以,在此,必须保证dbmgr和baseappmgr进程已经启动完毕。
对于这些进程的状态数据,CBE都是由Components这个单例类来维护。

Components::ComponentInfos* baseappmgrinfos = Components::getSingleton().getBaseappmgr();
if(baseappmgrinfos == NULL || baseappmgrinfos->pChannel == NULL || baseappmgrinfos->cid == 0)
{
    datas = "";
    _loginFailed(pChannel, loginName, SERVER_ERR_SRV_NO_READY, datas, true);
    s.done();
    return;
}



Q1: 如何避免用户连续多次发起登录请求?
一次完整的登录验证是需要一定时长的,在这个流程中如何避免多次流程的重入,只要在最开

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值