bigworld源码分析(4)——BaseAppMgr分析
2016-01-07 17:27
162 查看
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的呢?代码也很简单,如下:
从代码中可以看出,主要就是针对所有存在的baseApp,然后选择出load最小的一个。如果不存在的话,返回NULL。
3. BaseAppMgr给BaseApp做backup
(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 = 99999.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
相关文章推荐
- cocos jpg alpha_mask png
- bigworld源码分析(2)—— loginApp分析
- Android—慎用注解框架butterknife-7.0.1
- 基于百度推送android notification的使用之合并通知栏
- iOS成长之AutoLayout写控件的注意事项
- apple store链接格式文档
- 微信公众账号 token 验证失败 解决办法
- android 之 XMLPull
- Android适配最全最强
- wp apps
- ios测试基础七:常用软件
- iOS多线程中的dispatch_semaphore_t
- Android版本兼容
- web.xml中<web-app>出现有错误
- Neural NILM: Deep Neural Networks Applied to Energy Disaggregation
- android shape
- iOS 开发笔记
- IOS-添加分段控件SegmentControl
- swift学习01-基础语法(常量,变量,流程控制)
- “关于Android系统的指纹识别安全性”文章引来的讨论