OpenDDS自学

本文是关于OpenDDS的学习笔记,介绍了DDS的基础概念,如entity、sample和DDS application,探讨了OpenDDS的源码解读,特别是Chap3例子中的关键点,并提出了在学习过程中遇到的疑问,涉及领域参与者工厂、QoS策略等,旨在帮助初学者理解OpenDDS的工作原理。
摘要由CSDN通过智能技术生成

前言

最近做毕设要做一个DDS系统和TISA系统的网关,完全没有基础,只好对着OpenDDS的Developers’ Guide和《分布式系统实时发布/订阅数据分发技术》这本书一点一点学(顺便吐槽这本书就是guide的翻译版,很多语句不通)。遇到很多问题,持续更新,随着慢慢看能解决一部分,希望高手指正。

一些概念

  • entity是什么?
    答:DCPS entities包括topic, data writer,data reader, publisher, subscriber, domain participant。
  • sample数据样本?
    答:需要发布/订阅的数据。
  • DDS application是什么?
    答:dds应用程序,可以认为是需要发布、订阅数据的双方,datawriter,datareader是它们用于收发的一部分。
  • 实例和对象的区别?
    答:抽象类是无法实例化的,它们的对象只能叫对象;一般类的实例化对象,即可简称对象,也可简称实例。
  • sample,instance(实例),fields(字段)和key(键)的关系?
    key,field和instance
    OpenDDS要求数据类型是结构体(类),instance便是这个类的对象(实例),具体来说就是被传输的sample。
    一个域里有多种主题;发布消息时,一个主题下有按照结构体(类)创建多个实例instances;key用来识别同一主题下的不同的实例。发布时,拥有不同key的sample是同一主题下的不同实例。默认QOS下,同一个key下的后继的样本视为之前样本的替代。而字段其实就是只源码里的某一段代码。

(汉语书中对example和instance的翻译都是“实例”,我也是迷醉。。。。)其实有点面向对象的概念。
字段

源文件解读

Chap3的例子

  • chap3的例子中message.subject_id是键,用来区分不同实例。可是明明Messenger::Message message;只创建了一个message实例,每次更改键值其实不是创建不同实例,而是同一个实例改变了值发出去。
  • chap3例子里面用了一个for循环来发布不同的实例,所有发布出去之后,再等待subscriber接收。因此,wait_for_acknowledgements()是在for循环之外的。原因:

由于DDS内部数据的发布和订阅是解耦的,因此,如果在发送的所有数据已经被订阅所接收之前,发布被断开/关闭,则不能保证数据被递送。如果应用要求所有的发布数必须被接收,那么,可以进行wait_for_acknowledgements()操作&#x

  • 6
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值