BaseAppMgr是用来管理BaseApp的,在整个bigworld中只有一个。本篇就BaseAppMgr的一些核心功能进行分析:

  (1) BaseAppMgr是如何通知BaseApp创建Entity的

  (2) BaseAppMgr如何针对多个BaseApp做负载的

  (3) BaseAppMgr如何给BaseApp做backup的

  1. BaseAppMgr通知BaseApp创建Entity的

  baseAppMgr在收到dbMgrcreateEntity命令时,通过其消息接口将消息发送给最合适的BaseApp,流程如下图:

  

  整个流程非常简单,主要就是选取一个最好的(best)baseApp,然后消息通知它就可以了。

  2. BaseAppMgr选取best baseApp

  那么baseAppMgr是如何选举出bestBaseApp的呢?代码也很简单,如下:

  

/**
* This method finds the least loaded BaseApp.
*
* @return The least loaded BaseApp. If none exists, NULL is returned.
*/
BaseApp * BaseAppMgr::findBestBaseApp() const
{
const BaseApp * pBest = NULL; float lowestLoad = .f;
BaseAppMgr::BaseApps::const_iterator iter = baseApps_.begin(); while (iter != baseApps_.end())
{
float currLoad = iter->second->load();
     // 通过负载值比较,找出最小的一个
if (currLoad < lowestLoad)
{
lowestLoad = currLoad;
pBest = iter->second.get();
} iter++;
} return const_cast< BaseApp * >( pBest );
}

  从代码中可以看出,主要就是针对所有存在的baseApp,然后选择出load最小的一个。如果不存在的话,返回NULL。

  3. BaseAppMgr给BaseApp做backup

  

bigworld源码分析(4)——BaseAppMgr分析的更多相关文章

  1. bigworld源码分析(3)——dbMgr分析

    dbMgr主要是玩家数据的读取和保存的,例如在bigworld源码分析(3)中,玩家在认证的时候,loginApp需要通过dbMgr来验证玩家数据是否合法,这就是针对玩家的账号数据进行查询.本篇中,我 ...

  2. bigworld源码分析(1)—— 研究bigworld的意义和目标

    对于网络游戏服务器开发熟悉的人,基本都知道bigworld引擎,此引擎包括客户端部分和服务器部分,已经有很多知名的网络游戏通过bigworld来构建游戏.我主要关注bigworld的服务器部分,它是一 ...

  3. ArrayList源码和多线程安全问题分析

    1.ArrayList源码和多线程安全问题分析 在分析ArrayList线程安全问题之前,我们线对此类的源码进行分析,找出可能出现线程安全问题的地方,然后代码进行验证和分析. 1.1 数据结构 Arr ...

  4. Okhttp3源码解析(3)-Call分析(整体流程)

    ### 前言 前面我们讲了 [Okhttp的基本用法](https://www.jianshu.com/p/8e404d9c160f) [Okhttp3源码解析(1)-OkHttpClient分析]( ...

  5. Okhttp3源码解析(2)-Request分析

    ### 前言 前面我们讲了 [Okhttp的基本用法](https://www.jianshu.com/p/8e404d9c160f) [Okhttp3源码解析(1)-OkHttpClient分析]( ...

  6. Spring mvc之源码 handlerMapping和handlerAdapter分析

    Spring mvc之源码 handlerMapping和handlerAdapter分析 本篇并不是具体分析Spring mvc,所以好多细节都是一笔带过,主要是带大家梳理一下整个Spring mv ...

  7. HashMap的源码学习以及性能分析

    HashMap的源码学习以及性能分析 一).Map接口的实现类 HashTable.HashMap.LinkedHashMap.TreeMap 二).HashMap和HashTable的区别 1).H ...

  8. ThreadLocal源码及相关问题分析

    前言 在高并发的环境下,当我们使用一个公共的变量时如果不加锁会出现并发问题,例如SimpleDateFormat,但是加锁的话会影响性能,对于这种情况我们可以使用ThreadLocal.ThreadL ...

  9. 物联网防火墙himqtt源码之MQTT协议分析

    物联网防火墙himqtt源码之MQTT协议分析 himqtt是首款完整源码的高性能MQTT物联网防火墙 - MQTT Application FireWall,C语言编写,采用epoll模式支持数十万 ...

  10. Netty 源码学习——客户端流程分析

    Netty 源码学习--客户端流程分析 友情提醒: 需要观看者具备一些 NIO 的知识,否则看起来有的地方可能会不明白. 使用版本依赖 <dependency> <groupId&g ...

随机推荐

  1. Spring中处理Post方法中文乱码

    在Web.xml中配置: <!-- 注册Spring提供的处理Post请求的乱码问题 --> <filter> <filter-name>CharacterEnco ...

  2. 实操canvas

    我觉得仅仅靠看书是不会学好canvas的,经过前几天对canvas画布属性的阅读和了解,然后我觉得还是要实际操作才会学的更好. <canvas width="" height ...

  3. UITableViewCell的cell重用原理

    iOS设备的内存有限,如果用UITableView显示成千上万条数据, 就需要成千上万个UITableViewCell对象的话, 那将会耗尽iOS设备的内存.要解决该问题,需要重用UITableVie ...

  4. 深入浅出设计模式——工厂方法模式(Factory Method)

    介绍在简单工厂模式中,我们提到,工厂方法模式是简单工厂模式的一个延伸,它属于Gof23中设计模式的创建型设计模式.它解决的仍然是软件设计中与创建对象有关的问题.它可以更好的处理客户的需求变化. 引入我 ...

  5. 练习一:GitHub Desktop下载及使用

    推荐使用Git for Windows,官方网站 https://git-for-windows.github.io/ 这里有我写的Git和Github教程:http://www.cnblogs.co ...

  6. Android ViewPager实现选项卡切换

    ViewPager实现选项卡切换,效果图如下: 步骤一:这里使用兼容低版本的v4包进行布局,这里eclipse没有输入提示,所以要手动输入,文件名称“activity_main.xml” <Re ...

  7. shell的if判断

     shell的if判断 2012-03-16 14:53:05 分类: Python/Ruby   1 概要 有时候你需要指定shell脚本中的依靠命令的成功与否来实施不同过程的行为. if 结构允许 ...

  8. WCF服务在类库中的引用

    在类库中引用了WCF服务,悲剧降临了,追踪日志看到下边一串: --------------------------------------------------------------------- ...

  9. Android 之 Activity的生命周期

  10. WinForm窗体更新程序

    流程介绍: 打包参阅:WinForm程序打包说明    图一    图二    图三   实现步骤: 主程序 1.检测是否连上ftp服务器 1.1 连接不上,不检测. 1.2 连接上,如果有更新进程, ...