文章目录

  • OpenDDS
    • ACE
    • TAO
    • ACE+TAO
    • OpenDDS类型定义
    • OpenDDS Demo Code
    • OpenDDS 可扩展的传输框架
    • OpenDDS 发现
      • 利用DCPSInfoRepo的集中式发现(动态发现)
      • 利用RTPS的对等发现(静态发现)

OpenDDS

  • OpenDDS是用C++语言针对"对象管理组织“(OMG)关于数据分发服务(Data Distribution Service,DDS)规范的开源实现。
  • OpenDDS采用C++语言实现,但也提供JAVA和JMS的开发接口,这意味着JAVA程序开发也可以使用OpenDDS。
  • OpenDDS是构建在ACE(Adaptive Communication Environment,自适应通信环境,一套基于C++语言的开源网络可开发库)上,通过ACE保证跨平台和可移植性。
  • OpenDDS同时利用了TAO(The ACE ORB,基于ACE基础上的CORBA实现框架),提供IDL编译器等功能作为OpenDDS的DCPS信息仓库。
  • OpenDDS遵循OMG的DDSV1.2规范,同时采用和ACE/TAO相同的license,允许开发者在保留版权申明的前提下在各种场合(包括商用)使用和修改源代码。
  • 当前最新发行版本为OpenDDS3.15。

ACE

What is ACE?

TAO

What is TAO?

ACE+TAO

What is ACE+TAO?

More about ACE & TAO


读OpenDDS-latest.pdf

OpenDDS类型定义

OpenDDS定义IDL文件

@topic
struct Message
{string from;string subject;@key long subject_id;string text;long count;
}

@topic 注释说明:该类型可以与某一个Topic进行绑定,用作OpenDDS的传输类型。

@key 注释说明:subject_id字段被定义为键值。键值的作用是用来区分同一个topic下的不同的instance。

简单理解DDS中关于topic,instance和sample之间的关系,如图

同一个topic可以创建多个instance,不同的instance是按照key来进行区分的。而每一个instance可以理解为sample的模子,sample是实际的在节点间进行收发的数据。

OpenDDS Demo Code

简单如下:

OpenDDS 可扩展的传输框架

OpenDDS使用由DDS规范定义的IDL接口,以便于初始化以及控制服务使用。通过一个OpenDDS特有的传输框架,可以实现数据传输,而此框架可以允许服务利用各种传输协议,因此可称为可插拔的传输层,使得OpenDDS的架构具有很大的灵活性。
目前,OpenDDS支持TCP/IPUDP/IPIP多点发送共享内存以及RTPS_UDP等多种传输协议,如图。传输协议可以通过配置文件指定,并在发布和订阅者进程中附于各种实体。

OpenDDS 发现

OpenDDS发现服务,一种是peer-peer的发现(RTPS的对等发现),该发现的特点是节点在启动前需要配置好我所关心节点的信息(IP)。另一种是与第一种相反的方式(DCPSInfoRepo的集中式发现),在整个OpenDDS的系统中,所有节点之间并不知道彼此的存在,在程序启动后,由程序去检索DCPSInfoRepo服务实现动态发现。

我理解为动态发现静态发现

  • 信息仓库 (InfoRepo)集中式的储存库类型,其作为一个单独的进程运行,可以允许发布者和订阅者以集中式发现彼此。—动态发现
  • RTPS发现:一种对等的发现类型,使用RTPS协议通知可用性和本地信息。 —静态发现
    与其他DDS实现的互操作性必须使用对等方法,但只在OpenDDS部署中才有用。

利用DCPSInfoRepo的集中式发现(动态发现)

DCPSInfoRepo是OpenDDS执行的一种独立式服务,以便于实现集中式方法,他作为一个CORBA服务器进行实现。当用户请求关于一个主题的订阅时,DCPSInfoRepo就会定位主题,通知发布者目前有新的订阅者。当在非RTPS配置中使用OpenDDS时,就需要运行DCPSInfoRepo,而RTPS配置时则不需要使用DCPSInfoRepo。DCPSInfoRepo不包含在数据传播中,它的任务被限制在发现彼此的OpenDDS应用程序范围内。

应用程序使用者可利用DCPS域的非重叠性部分,灵活、自由地运行多个InfoRepo。

域操作可以在多个仓库上进行,从而形成一个分布式虚拟仓库,即仓库联盟(Repository Federation)。为了使每个仓库参与到联盟中,每个仓库都必须在启动时指定它自己的联盟标识符数值(一个32位的数字值)。

利用RTPS的对等发现(静态发现)

需要对等发现模式的DDS应用程序可由OpenDDS性能设定,通过使用RTPS协议可以完成这种类型的发现。这个简单的发现形式可通过DDS对DataReader和DataWriter的配置进行实现。

当每个参与者的进程激活DDS-RTPS发现机制时,需要利用默认(或者配置)的网络端口,网络端点才能被创建,这样才能方便后续DDS参与者发布DataReader以及DataWriter的详细配置信息。一段时间后,各个节点就会基于所配置的、可插拔的传输协议,发现彼此并创建一个连接。
当开发并部署需要使用RTPS发现的应用程序时,开发人员需考虑以下限制因素:

  • 由于UDP端口的方式被分配给域ID,那么,域ID应当在0~231(包含231)之间。在每个OpenDDS进程、每个域中,支持多达120个域参与者。
  • 主题名称以及类型识别码被限制到256个字符。
  • 由于全局唯一标识符(GUID)的方式被指定,OpenDDS的本地多点发送传输不能与RTPS发现一并工作(如果试图这样,那么将发布一个警告信息)。

什么是OpenDDS???What is OpenDDS???开源项目???相关推荐

  1. GitHub上的“金矿”(236个Python开源项目,涵盖了15个领域)

    人生苦短,越来越多的人,都开始用Python了. 但寻找好的项目资源,费时又费力,成了头号难题. 现在,好消息来了.最近,有人在GitHub上放了一座"金矿". 目前里面有236个 ...

  2. 【radar】毫米波雷达相关开源项目代码汇总(工具箱、仿真、2D毫米波检测、融合、4D毫米波检测、分割、SLAM、跟踪)(6)

    [radar]毫米波雷达相关开源项目代码汇总(工具箱.仿真.2D毫米波检测.融合.4D毫米波检测.分割.SLAM.跟踪)(6) Toolbox pymmw https://github.com/m6c ...

  3. 使用git更新github上的开源项目

    以前经常在github上下载一些开源项目,比如crtmpserver, nginx, apache traffic server, ffmpeg等, 一直不知道怎么同步更新到当前的最新源码. 我以前的 ...

  4. OpenDigg前端开源项目月报201704

    由OpenDigg 出品的前端开源项目月报第一期来啦.我们的前端开源月报集合了OpenDigg一个月来新收录的优质前端开源项目,方便前端开发人员便捷的找到自己需要的项目工具. reactide Rea ...

  5. windows下nodejs express安装及入门网站,视频资料,开源项目介绍

    windows下nodejs express安装及入门网站,视频资料,开源项目介绍,pm2,supervisor,npm,Pomelo,Grunt安装使用注意事项等总结 第一步:下载安装文件 下载地址 ...

  6. 人工智能和机器学习领域有哪些有趣的开源项目

    人工智能和机器学习领域有哪些有趣的开源项目? 投递人 itwriter 发布于 2014-12-02 11:21 评论(0) 有20人阅读  原文链接  [收藏]  « 本文简要介绍了 10 款   ...

  7. huggingface实操_盘点2018年度GtiHub开源项目TOP 25

    本文作者 Pranav Dar 是 Analytics Vidhya 的编辑,对数据科学和机器学习有较深入的研究和简介,致力于为使用机器学习和人工智能推动人类进步找到新途径.2018 这一年中,作者在 ...

  8. python潜力开源项目_比较了1000多个Python开源项目,精选出这34个

    传智播客博学谷 微信号:boxuegu- get最新最全的IT技能 免费领取各种视频资料 在过去的一年里,Mybridge比较了近1000个的Python开源库,并从中评选出34个最有用的工具来帮助你 ...

  9. python开源库推荐_推荐5个值得关注的Python开源项目

    原标题:推荐5个值得关注的Python开源项目 今天小编看到了五个开源项目,觉得还错,推荐给大家. 1.Wagtail CMS Wagtail是一个基于Django的CMS系统 它拥有优质的用户体验 ...

最新文章

  1. python读取csv文件第一行_尝试读取CSV文件的第一行返回['/']
  2. 移动端HTML5video视频播放优化实践
  3. 程序员的鄙视链,你被鄙视了吗?
  4. 代码调试技巧小集合(C语言描述,但C/C++/Pascal通用)
  5. 外星人进化_外星人真的比人类强大吗?科学家给出几种猜想,你认同吗?
  6. 判断数据类型的几种方法
  7. Word:开机即启动Word程序(转)
  8. 微信网页授权 Vue
  9. 怎样清理计算机空间,电脑清除缓存,怎么清除电脑内存垃圾
  10. python列表逆序
  11. PDF如何导出成图片,操作教程
  12. 一文教你用 Neo4j 快速构建明星关系图谱
  13. [C语言错误]expected declaration or statement at end of input)
  14. CS61A fa2021 Composing Programs 2.7 Object Abstraction 对象抽象
  15. 苹果Mac mini装win 7系统
  16. 苹果手机微信声音小怎么调大声_苹果6plus听筒没声音,学会这招自己就能解决...
  17. 关闭浏览器 清除cookie
  18. 东胜区智慧城市管理运行初见端倪
  19. 年中总结 | 愿自己更好面对未来 2022/6
  20. L9110S电机驱动——让小车动起来

热门文章

  1. 74HC595芯片实现原理及跑马灯数码管应用程序-----day2
  2. Java poi 操作word替换模版中固定参数(页眉、段落、表格)
  3. Vue安装并创建项目
  4. 小学生图片_小学生英语口语提高方法有哪些
  5. 华为手机点击android棒棒,Android 推送点击跳转与华为推送神坑
  6. 移动端(五)flexible.js + rem适配布局
  7. 如何下载MyBatis呢?
  8. 单片机at89c51数字钟c语言,(定稿)毕业论文基于AT89C51单片机数字时钟的设计(完整版)...
  9. 尼古拉·特斯拉(膜拜伟人)转自百度百科
  10. Unidbg-Linker部分源码分析(下)