开源服务器框架NoahFrame分享 第二章:插件与模块[图]
时间:2017-10-31 11:55:22
最初接触插件(Plugin)是当年开发客户端的时候使用的Ogre引擎,里面的设计另当时我这个小菜鸟惊叹不己,原来还可以这样组织代码。然后时隔多年,在Ogre的影响下,又进一步在NF引擎内加入了module和component,用以完善插件式遗漏的一些缺陷。
Ogre的插件式架构,是建立在动态库上的,windows为.dll,linux为.so,NF引擎也是如此(我在主导无双项目在开发的时候,又全部改成了静态库,改成静态库在NF引擎中只需要修改几十行代码即可)。使用插件来组织代码,好处非常多,比如同事分工协作方面,比如逻辑热更新方面(静态语言非脚本,比如使用c 热更新),比如维持代码的单纯度和统一管理规范方面,比如企业安全信息保密方面等等。
NF引擎的插件管理比Ogre略复杂,主要体现在每个插件内部都有module,然后所有的module在启动时又都注册到PluginManager接受PluginManager的管理。NFPluginLoader为程序的执行入口,他会自动查找启动目录下的Plugin.xml文件,然后加载里面配置过的plugin(或者自行传入名字让PluginLoader加载),例如:
Plugin.xml内部声明了每类服务器启动的时候需要加载的插件以及配置文件(NFDataCfg)路径,因为考虑到产品运维更偏向使用脚本批量启动服务器,因此AppID在脚本中可以传入,比如:
./NFPluginLoader_d -d Server=MasterServer ID=3
./NFPluginLoader_d -d PluginX.xml Server=MasterServer ID=3
插件加载程序的入口在文件NFPluginLoader.cpp的main函数,会先初始化NFCPluginManager,
然后调用NFCPluginManager进行初始化加载动态库(.dll .so),然后统一管理所有的插件,并统一进行初始化,反初始化,帧执行等操作,简略代码如下:
int main(int argc, char* argv[])
{
ProcessParameter(argc, argv);
NFCPluginManager::GetSingletonPtr()->Awake();
NFCPluginManager::GetSingletonPtr()->Init();
NFCPluginManager::GetSingletonPtr()->AfterInit();
相关游戏
-
开源读书软件26MB新闻资讯
-
开源阅读app1MB新闻资讯
-
tap,tap双击背部官网111MB系统安全
-
小松鼠短视频完美开源源码26MB影音视频
最新合集
- 我的世界Jennyslipperyt合集2021-8-19
- 成语大富豪游戏合集2021-8-16
- 古装视频faceplay合集2021-8-20
- 小洽暖软件合集2021-8-18
- 小洽暖会员合集2021-8-20
- 换脸古风视频制作合集2021-8-20
- 火柴人觉醒破解版合集2021-8-18
- bud游戏下载美乐蒂合集2021-8-17
- faceplay安卓版合集2021-8-18
- 网上最火的古装换脸软件合集2021-8-17
相关文章
最新游戏
玩家评论
网名(您的评论需要经过审核才能显示) 回复 [ ] 楼取消回复