构建自己的C/C++插件开发框架(一)——初步设想
发布日期:2021-10-03 22:59:37 浏览次数:13 分类:技术文章

本文共 950 字,大约阅读时间需要 3 分钟。

最近一直在学习OSGI方面的知识。买了一本《OSGI原理和最佳实践》,可是还没有到。遗憾的是,OSGI目前的几个开源框架只支持Java,对C和C++都不支持的。可惜我们公司目前主要的开发语言还是c和c++,即便是引进OSGI,所得的好处范围有限。而我对松散耦合的模块化开发向往已久。查了一下OSGI对C++支持的好像是有一个开源项目,不过好像应用范围很小。而SCA标准中是有对C++实现模型的支持的,但是几个开源的框架目前还只支持JAVA。

  昨天看了丁亮的转载的一篇博客《C/C++:构建你自己的插件框架 》,原文的链接: 。看了一下里面讲的方法,自己倒是可以实现。所以有了构建自己的c/c++插件开发框架的想法。今天先写一下初步的设想。

 

  C/C++插件开发框架的要素

  BlueDavy有一篇介绍服务框架要素的文章(链接: )。我的插件框架也要考虑、解决以下的几个问题:

  1、如何注册插件;

  2、如何调用插件;

  3、如何测试插件;

  4、插件的生命周期管理;

  5、插件的管理和维护;

  6、插件的组装;

  7、插件的出错处理;

  8、服务事件的广播和订阅(这个目前还没有考虑要支持);

  其中有几个点很重要:1)插件框架要能够使模块松散耦合,做到真正的面向接口编程;2)框架要支持自动化测试:包括单元测试,集成测试;3)简化部署;4)支持分布式,模块可以调用框架外的插件。

 

  采用的技术
  插件框架要解决的一个问题就是插件的动态加载能力。这里可以使用共享库的动态加载技术。当然,为了简单,第一步只考虑做一个linux下的插件框架。

 

  总体结构

  框架的总体结构上,参考OSGI的“微内核+系统插件+应用插件”结构。这里要好好考虑一下把什么做在内核中。关于微内核结构,以前我做个一个微内核流程引擎,会在后面有时间和大家分享。

  框架中模块间的数据传送,有两种解决方法:一是普元采用的XML数据总线的做法。优点是扩展性好,可读性好。但是速度有些慢。二是采用我熟悉的信元流。优点的效率高,访问方便,但是可读性差一点,另外跨框架的数据传送,需要考虑网络字节序的问题。

  对于框架间的通信,通过系统插件封装,对应用插件隐藏通信细节。

 

      部署

      努力做到一键式部署。

转载地址:https://blog.csdn.net/lclflash/article/details/8856812 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:构建自己的C/C++插件开发框架(二)——总体功能
下一篇:linux下C++ 插件(plugin)实现技术

发表评论

最新留言

感谢大佬
[***.8.128.20]2023年02月27日 14时26分39秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

最新文章

c语言 java转换器,求助大神!!!JAVA转换成C语言 2019-12-06 20:23:43
linux c++ for i<0 循环,C++ for循环 2019-12-06 20:23:43
c语言调用串口扫码枪,C#利用控件mscomm32.ocx读取串口datalogic扫描枪数据 2019-12-06 20:23:43
labview c语言定义变量,第一章:LabVIEW 的编程环境 如何使用 VI 的重入属性(Reentrant)... 2019-12-06 20:23:44
linux编译安装openssh,RHEL6编译安装OpenSSH 2019-12-06 20:23:41
linux看安装了哪些函数,如何查看linux动态库中包含哪些函数 2019-12-06 20:23:42
allegro linux 安装教程,Linux上Centos系统知识图谱Allegrograph 6.6.0的安装方法和流程介绍... 2019-12-06 20:23:42
共创桌面linux,摒弃前嫌 KDE携手GNOME共创Linux桌面 2019-12-06 20:23:42
linux open函数功能,Linux系统文件I / O编程(1)--- open()和其他基本功能 2019-12-06 20:23:42
linux安装ruby环境 rvm,如何快速正确的安装 Ruby, Rails 运行环境 2019-12-06 20:23:42
宝塔Linux301重定向,宝塔面板如何设置301重定向(详细教程)! 2019-12-06 20:23:42
oracle 连接失去联系,插入大文件时c# – “ORA-03135:连接失去联系” 2019-12-06 20:23:40
linux服务器重启查询命令行,last命令查看系统重启状态(人工手动重启的还是系统内用命令重启的系统)... 2019-12-06 20:23:41
linux中kvm配置文件,如何在linux中通过kvm安装虚拟机 2019-12-06 20:23:41
linux内核5.6,在Deepin V20下可用命令来升级Linux内核到5.6版本以上 2019-12-06 20:23:41
linux svn服务器搭建 jb51,详解Linux服务器配置——搭建SVN服务器 2019-12-06 20:23:41
php处理 xss方法,php实现XSS安全过滤的方法 2019-12-06 20:23:39
oracle 查询最高分,SQL查找一个表里,每个班级的最高分。 2019-12-06 20:23:40
oracle 中rank(),sql – 在oracle中RANK()和DENSE_RANK()函数之间有什么区别? 2019-12-06 20:23:40
oracle客户端连接阻塞,java – Oracle JDBC间歇性连接问题 2019-12-06 20:23:40