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

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

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

  BlueDavy有一篇介绍服务框架要素的文章(链接:http://www.blogjava.net/BlueDavy/archive/2009/08/28/172259.html )。我的插件框架也要考虑、解决以下的几个问题:

  1、如何注册插件;

  2、如何调用插件;

  3、如何测试插件;

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

  5、插件的管理和维护;

  6、插件的组装;

  7、插件的出错处理;

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

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

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

  总体结构

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

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

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

      部署

努力做到一键式部署。

构建自己的C/C++插件开发框架相关推荐

  1. Skeljs – 用于构建响应式网站的前端开发框架

    skelJS 是一个轻量级的前端框架,用于构建响应式站点和应用程序.让设计人员和开发人员可能够使用四个强大的组件:CSS 网格系统,响应式处理程序,CSS 的快捷方式和插件系统. 您可能感兴趣的相关文 ...

  2. Jeecg-P3 1.0版本发布,JAVA插件开发框架

    Jeecg-P3 1.0 版本发布,插件开发框架 特点:业务组件以JAR方式提供,插件模式.松耦合.可插拔.支持独立部署,也可以无缝集成Jeecg平台中. [架构说明] 1.Jeecg-P3 采用Sp ...

  3. vue2中,使用vite流程之应用前端构建工具vite和vite-plugin-vue2插件

    vue2中,使用vite流程之应用前端构建工具vite和vite-plugin-vue2插件 Vite 官方中文文档--https://cn.vitejs.dev/ vite-plugin-vue2包 ...

  4. android中的插件开发框架,设计并开发一个 Android 的插件化框架

    结合动态加载系列文章的分析,现在开始设计并开发一个 Android 的插件化框架,命名为 Frontia.Frontia 有 "前端" 的意思,寓意着 Android 插件能像前端 ...

  5. maven指定项目的构建、打包和tomcat插件的pom.xml配置

    1.pom.xml添加如下配置: <build> <finalName>${parent.artifactId}</finalName> <plugins&g ...

  6. 【技术文档】Jeecg-P3开发环境搭建入门(java插件开发框架)

    一.项目工程说明 jeecg-p3-web       | 启动主项目 jeecg-p3-biz-demo | 插件项目     注意:项目为maven工程,采用maven方式导入eclipse等ID ...

  7. qt插件开发框架搭建_Flutter框架之:开发环境搭建

    第一部分 环境准备 1.首先安装Java环境 Java SE Development Kit 8​www.oracle.com 这里需要登录,用户名是电子邮件,密码要1位大写. 配置JAVA环境变量 ...

  8. 浏览器插件开发框架FireBreath的使用--linux版本

    一.下载FireBreath git clone https://github.com/firebreath/FireBreath.git git submodule update –init –re ...

  9. 搭建AE插件开发框架

    AE 全称 Adobe After Effects,是 adobe 公司推出的一款图形视频处理软件,其插件可以帮助我们更好地操作 AE.插件主要分为用户效果的和通用插件两种,入口函数也相应的分为 Ef ...

最新文章

  1. 三层交换机如何封装trunk_锐捷交换机常用配置命令汇总
  2. 直线电机原理动画_每周一品 · 直线电机(Linear Motor)中的磁性材料
  3. TCP/IP详解卷一02
  4. 【工业控制】OmniCal软件安装和使用详解
  5. 浅谈Floyd的三种用法 By cellur925
  6. GitHub Universe 2021|MS Reactor 邀你共聚年度盛会
  7. mysql判断是否在日期区间_通过sql判断时间区间是否存在数据
  8. C#递归、动态规划计算斐波那契数列
  9. (原码反码补码的计算)在一个8位的二进制的机器中,补码表示的整数范围是从_(1)_(小)到_(2)_(大)。这两个数在机器中的补码表示为_(3)_(小)到_(4)_(大)。数0的补码为_(5)_。
  10. VALSE学习(五):看图说话-Visual Question Answering as Reading Comprehension
  11. linux常用解压命令总结
  12. 清华姚班毕业生开发新特效编程语言,99行代码实现《冰雪奇缘》,网友:大神碉堡!创世的快乐...
  13. LSTM神经网络在证券市场分析上的应用
  14. Java 移位操作符
  15. 2022年认证杯SPSSPRO杯数学建模A题(第一阶段)人员的紧急疏散求解全过程文档及程序
  16. 爬虫基础 || 2.1 request介绍(功能比urllib丰富,附上简单的知乎爬虫)
  17. 关于随机数,真随机,伪随机
  18. 使用 maven-semantic-release 实现自动化发版
  19. 江苏大专计算机考试,江苏省教育考试院2020年高职(专科)注册入学申请入口...
  20. 拉普拉斯特征映射(Laplacian Eigenmaps, LE)

热门文章

  1. 【MATLAB】变量 ( 特殊变量和常量 | 关键字 | 调用优先级 | 数值显示格式 )
  2. 【计算机网络】应用层 : DNS 域名解析系统 ( 域名 | 域名服务器 | 域名解析过程 | 递归查询 | 迭代查询 | 高速缓存 )
  3. 【Android 应用开发】Paint 图形组合 Xfermod 简介 ( 图形组合集合描述 | Xfermod 简介 | PorterDuff 简介 )
  4. 【数理逻辑】范式 ( 合取范式 | 析取范式 | 大项 | 小项 | 极大项 | 极小项 | 主合取范式 | 主析取范式 | 等值演算方法求主析/合取范式 | 真值表法求主析/合取范式 )
  5. 开源项目kcws代码分析--基于深度学习的分词技术
  6. 小程序加载本地图片路径问题
  7. 变参标准函数的重新封装,如printf
  8. *LeetCode--Add Two Numbers
  9. 恐龙拼图游戏 - 恐龙拼图乐园积木游戏
  10. MySQL数据导入oracle