DDS(Data Distribution Service) 数据分发服务

什么是DDS

数据分发服务(DDS™)是一个由对象管理组(OMG)发布的以数据为中心的中间件协议和API标准。采用分布式发布/订阅体系架构,以中间件的形式提供通信服务,强调以数据为中心。DDS中间件是一个软件层,从操作系统、网络传输和底层数据格式的细节中抽象出应用。相同的概念和api提供给不同的编成语言,使得应用在不同的操作系统、编成语言和处理体系架构之间交换信息。底层细节包括数据传输格式、发现、连接、可靠性和、协议、Qos策略等由中间件来管理。

为什么要使用DDS

DDS集成系统中的各个组件,提供低延迟数据连接、高可靠性以及高可扩展体系结构,以适应商业级物联网(IoT)应用程序的需求。

基本概念

全局数据空间

DDS把所有的本地存储的数据称作全局数据空间(domain)。对于应用来说,全局数据空间看上去像通过api来访问内存一样。你使用时,就像使用本地存储一样。事实上,DDS发送消息来更新远端节点的相应存储值。这样,在使用时,如同本地存储。

发布者

发布者(publisher)设置发布的主题(topic),数据读者(subscriber)订阅感兴趣的主题。publisher作为发布者角色,至少包含一个DataWriter,并负责创建,删除和管理datawriter。同样,subscriber作为订阅者,至少与一个datareader关联,并负责发布数据,数据发布者通过调用datawriter的write函数发布数据,但数据不会立刻被送出,实际的消息产生是通过publisher和Qos综合控制的。datareader负责订阅数据,订阅方式可采用异步方式(listener),同步方式和非阻塞三种。

// Create the subscriber    DDS::Subscriber_var sub =          participant->create_subscriber(SUBSCRIBER_QOS_DEFAULT,                                     0,OpenDDS::DCPS::DEFAULT_STATUS_MASK);// No listener required                                             if (!sub) {      std::cerr << "Failed to create_subscriber." << std::endl;      return 1;}// Create the Datareader    DDS::DataReader_var dr =          sub->create_datareader(topic,                                                                   DATAREADER_QOS_DEFAULT,                                                        listener,                                                                      OpenDDS::DCPS::DEFAULT_STATUS_MASK);    if (!dr) {          std::cerr << "create_datareader failed." << std::endl;          return 1;    }

QoS策略

QoS(Quality of Service)服务质量:指一个网络能够利用各种基础技术,为指定的网络通信提供更好的服务能力,是网络的一种安全机制, 是用来解决网络延迟和阻塞等问题的一种技术。

在一个真实系统中,并不是所有其他端点都需要另一个节点本地存储中的所有内容 ,DDS在提供最基础的发布订阅功能之外,还可以根据不同使用场景向用户提供满足对应需求的服务。QoS有可靠性、持久性、紧迫性等,可单独或组合使用。

例如“尽力而为”模式(BESTEFFORTRELIABILITYQOS):

对样本的可靠性没有任何保证,在某些情况下可能会丢弃样本。(通俗解释:在外界环境不稳定的时候,可能会导致丢包,但是DDS为了保证整体数据分发效率,不会重新分发丢包的数据)

“可靠”模式(RELIABLERELIABILITY_QOS):

该服务最终应将所有值传递给合格的数据读取器。(通俗解释:万一出现丢包现象,会重新分发数据,保证订阅者能够收到)重新分发数据表示:修复错误并根据需要重新传输数据样本

数据读者和主题的此策略的默认值为“尽力而为”,而数据写者的默认值为“可靠”。在创建数据写者和数据读者之间的关联时会考虑此策略。 关联双方的值必须兼容才能创建关联。 数据写入器的可靠性类型必须大于或等于数据读者的值。

idl文件

IDL(接口描述语言)是一种使用类似C ++风格定义结构的文本文件。该文件包含必须交换的数据结构。IDL通常用于远程调用软件。在这种情况下,一般是由远程客户终端调用不同操作系统上的对象组件,并且这些对象组件可能是由不同计算机语言编写的。IDL创建起了两个不同操作系统间通信的桥梁。所以使用同一份idl文件来统一接口的数据类型。

示例:TopicData.idl

module TopicData{      #pragma DCPS_DATA_TYPE "TopicData::Message"      #pragma DCPS_DATA_KEY  "TopicData::Message id"      struct Message{        string id;        int posX;        int posY;    };}

SkyEye天目全数字实时仿真软件

由本公司自主开发的SkyEye(天目全数字实时仿真软件)目前支持主流的嵌入式硬件平台。DDS是一套工业物联网成熟的数据连接标准,开发者可以在SkyEye上测试DDS通信代码。SkyEye目前可以运行主流的操作系统,此外还能适配国内自主研发的操作系统天脉。通过利用基于LLVM的动态二进制翻译技术,使虚拟处理器在典型的桌面计算机上运行速度可以达到2000MIPS以上。

参考文献

omg组织官网:

DDS Vendor Directory | Object Management Group

OpenDDS  github地址:

https://github.com/objectcomputing/OpenDDS

openDDS 使用文档:

http://download.ociweb.com/OpenDDS/OpenDDS-latest.pdf

一文读懂什么是DDS相关推荐

  1. 一文读懂“数据分发服务DDS”(Data Distribution Service,RTPS,OMG)

    一文读懂"数据分发服务DDS"(Data Distribution Service,RTPS,OMG) https://blog.csdn.net/DDS_CSIT/article ...

  2. 从实验室走向大众,一文读懂Nanopore测序技术的发展及应用

    关键词/Nanopore测序技术    文/基因慧 随着基因测序技术不断突破,二代测序的发展也将基因检测成本大幅降低.理想的测序方法,是对原始DNA模板进行直接.准确的测序,消除PCR扩增带来的偏差, ...

  3. 一文读懂Faster RCNN

    来源:信息网络工程研究中心本文约7500字,建议阅读10+分钟 本文从四个切入点为你介绍Faster R-CNN网络. 经过R-CNN和Fast RCNN的积淀,Ross B. Girshick在20 ...

  4. 福利 | 一文读懂系列文章精选集发布啦!

    大数据时代已经悄然到来,越来越多的人希望学习一定的数据思维和技能来武装自己,虽然各种介绍大数据技术的文章每天都扑面而来,但纷繁又零散的知识常常让我们不知该从何入手:同时,为了感谢和回馈读者朋友对数据派 ...

  5. ​一文读懂EfficientDet

    一文读懂EfficientDet. 今年年初Google Brain团队在 CVPR 2020 上发布了 EfficientDet目标检测模型, EfficientDet是一系列可扩展的高效的目标检测 ...

  6. 一文读懂序列建模(deeplearning.ai)之序列模型与注意力机制

    https://www.toutiao.com/a6663809864260649485/ 作者:Pulkit Sharma,2019年1月21日 翻译:陈之炎 校对:丁楠雅 本文约11000字,建议 ...

  7. AI洞观 | 一文读懂英特尔的AI之路

    AI洞观 | 一文读懂英特尔的AI之路 https://mp.weixin.qq.com/s/E9NqeywzQ4H2XCFFOFcKXw 11月13日-14日,英特尔人工智能大会(AIDC)在北京召 ...

  8. 一文读懂机器学习中的模型偏差

    一文读懂机器学习中的模型偏差 http://blog.sina.com.cn/s/blog_cfa68e330102yz2c.html 在人工智能(AI)和机器学习(ML)领域,将预测模型参与决策过程 ...

  9. 一文读懂AI简史:当年各国烧钱许下的愿,有些至今仍未实现

    一文读懂AI简史:当年各国烧钱许下的愿,有些至今仍未实现 导读:近日,马云.马化腾.李彦宏等互联网大佬纷纷亮相2018世界人工智能大会,并登台演讲.关于人工智能的现状与未来,他们提出了各自的观点,也引 ...

最新文章

  1. 服务器日志显示乱码,CentosOS 6.5 服务器 控制台输出中文乱码,日志打印中文也乱码...
  2. 位运算详解+竞赛常见用法总结
  3. 汇编语言随笔(5)-and、or指令,串传送指令movsb、访问内存单元的方式及实验4,5(向内存传送数据)
  4. mysql with ties_MySQL令人咋舌的隐式转换
  5. FastAPI ------框架基础
  6. 单板机 单片机 c语言,单板机 单片机 个人计算机有什么区别吗
  7. visualSVN下载与安装
  8. 【公众号系列】SAP S/4 HANA的移动平均价
  9. 二级c语言需要记库函数不,【2017年必备】计算机等级二级C语言上机考试题库(熟记必过,不看后悔).doc...
  10. 安装nginx时关系依赖库openssl.lib时,出现:error: 'NR_syscalls' undeclared (first use in this function)
  11. No.3 - CSS transition 和 CSS transform 配合制作动画
  12. webpy使用笔记(一)
  13. Oracle树结构查询按层级排序
  14. R语言metafor包预后meta分析复现
  15. matlab simulink光伏发电系统MPPT算法
  16. c语言仿宋gb2312字体,【仿宋gb2312字体下载】仿宋gb2312字体官方下载 免费版-七喜软件园...
  17. 你写的api接口代码真是_有哪些好玩的免费的API接口?
  18. 【量化】验证《股市操盘宝典》对周期论
  19. 融合差分变异策略和自适应调整权重的改进蝴蝶优化算法
  20. python自动翻译导学案_变量python学案

热门文章

  1. ip68级防水可以泡多久_ip68级防水手机有哪些
  2. Linux安装MySQL8.0
  3. minist _On_[GoogleNet]
  4. oracle open_link,open_links_per_instance 和 open_links 参数说明
  5. sqlrowset 转化为json_Python 操作 JSON 的 9 个示例
  6. android开发所遇问题集(一)----Mr.Zhang
  7. 推荐系统fmlr_推荐系统实践 0x0c FM系列(LR/FM/FFM)
  8. uniapp 底部菜单_uniapp 原生导航栏
  9. python为什么import不了_解决python有时候import不了当前的包问题
  10. 说说python程序的执行过程_做人,尽量不要说这四种话,一说,祸事就来了