FastDDS-3. DDS层
3. DDS层
eProsima Fast DDS公开了两个不同的API,以在不同级别与通信服务交互。主要API是数据分发服务(DDS)数据中心发布订阅(DCPS)平台独立模型(PIM)API,简称DDS DCPS PIM,由Fast DDS遵循的数据分发服务1.4版规范定义。本节旨在解释Fast DDS下此API的主要特性和使用模式,并对其分为五个模块进行深入解释:
- Core: 它定义了由其他模块细化的抽象类和接口。它还提供了服务质量(QoS)定义,以及支持中间件的基于通知的交互。
- Domain: 它包含充当服务入口点的DomainParticipant类,以及许多类的工厂。DomainParticipant还充当构成服务的其他对象的容器。
- Publisher: 它描述了发布端使用的类,包括Publisher和DataWriter类,以及PublisherListener和DataWriterListener接口。
-Subscriber: 它描述了订阅端使用的类,包括Subscriber和DataReader类,以及SubscriberListener和DataReaderListener接口。 - Topic: 它描述了用于定义通信主题和数据类型的类,包括Topic和TopicDescription类,以及TypeSupport和TopicListener接口。
3.1 Core
此模块定义其他模块将使用的基础结构类和类型。它包含实体类、QoS策略和状态的定义。
- Entity: 实体是具有状态的DDS通信对象,可以使用策略进行配置。
- Policy: 控制实体行为的每个配置对象。
- Status: 与实体关联的每个对象,其值表示该实体的通信状态。
3.1.1 Entity
实体是所有DDS实体的抽象基类,意味着支持QoS策略、侦听器和状态的对象。
3.1.1.1 Entity的类型
- DomainParticipant: 此实体是服务的入口点,充当发布服务器、订阅服务器和主题的工厂。有关详细信息,请参阅DomainParticipant。
- Publisher: 它充当一个工厂,可以创建任意数量的DataWriter。有关详细信息,请参阅Publisher。
- Subscriber: 它充当一个工厂,可以创建任意数量的DataReader。有关详细信息,请参阅订阅服务器。
- Topic: 此实体位于发布实体和订阅实体之间,充当通道。有关详细信息,请参阅主题。
- DataWriter: 是负责数据分发的对象。有关详细信息,请参阅DataWriter。
- DataReader: 用于访问接收数据的对象。有关详细信息,请参阅DataReader。
下图显示了所有DDS实体之间的层次结构:
3.1.1.2 通用实体特征
所有实体类型都具有实体概念所共有的一些特征。这些是:
3.1.1.2.1 Entity标识符
每个实体都由一个唯一的ID标识,该ID在DDS实体与其对应的RTPS实体(如果存在)之间共享。该ID存储在Entity基类上声明的Instance Handle对象上,可以使用getter函数get_Instance_Handle()访问该对象。
3.1.1.2.1 QoS策略
可以使用一组配置策略来配置每个实体的行为。对于每个实体类型,都有一个对应的服务质量(QoS)类,该类对影响所述实体类型的所有策略进行分组。用户可以创建这些QoS类的实例,根据自己的需要修改包含的策略,并在创建过程中或稍后使用每个实体公开的set_QoS()函数来配置实体(DomainParticipant::set_qos(),Publisher::set_qos(),Subscriber::set.qos(),Topic::set.qos(),DataWriter::set_qos(),DataReader::set.qos())。有关可用策略及其说明的列表,请参阅策略。QoS类及其包含的策略在每个实体类型的文档中进行了解释。
3.1.1.2.3 Listener监听器
侦听器包含一些函数,实体使用这些函数来响应事件。因此,侦听器充当异步通知系统,允许实体向应用程序通知实体中的状态更改。因此,侦听器就像一个异步通知系统,允许实体向应用程序通知实体中的状态更改。
所有实体类型都定义一个抽象侦听器接口,该接口包含实体将触发的回调函数,以将状态更改传递给应用程序。用户可以实现自己的侦听器,从这些接口继承并实现应用程序所需的回调。然后,他们可以在创建过程中或稍后使用每个实体公开的set_listener()函数将这些侦听器链接到每个实体(DomainParticipant::set_listenr(),Publisher::set_litener(),Subscriber::set-listener((),Topic::set-liistener()),DataWriter::set _listener。每个实体类型的侦听器接口及其回调在每个实体类型文档中进行了解释。当事件发生时,它由具有非空侦听器的最低级别实体处理,并且在其StatusTask中启用了相应的回调。高级侦听器继承自低级侦听器,如下图所示:
注意:
on_data_on_readers()回调在on_data_available()之前拦截消息。这意味着如果启用了DomainParticipantListener,用户应该考虑默认情况下侦听器使用StatusMask::all()。由于保留了回调实体层次结构,在这种情况下将调用on_data_on_readers()。如果应用程序希望改用on_data_available(),则应禁用Statusask的相应位。
重要:
在创建实体时使用StatusMask::none()仅禁用DDS标准回调:
- on_sample_rejected()
- on_liveliness_changed()
- on_requested_deadline_missed()
- on_requested_incompatible_qos()
- on_data_available()
- on_subscription_matched()
- on_sample_lost()
- on_offered_incompatible_qos()
- on_offered_deadline_missed()
- on_liveliness_lost()
- on_publication_matched()
- on_inconsistent_topic()
- on_data_on_readers()
始终启用特定于Fast DDS的任何回调:
- on_participant_discovery()
- on_ParticipantAuthentication()
- on_subscriber_discovery()
- on_publisher_discovery()
- on_type_discovery()
- on_type_dependencies_reply()
- on_type_information_received()
- on_unacknowledged_sample_removed()
警告: 只创建一个线程来侦听每个实现的侦听器,因此建议保持侦听器函数的简单性,将此类信息的处理留给适当的类。
警告:
不要在侦听器成员函数的范围内创建或删除任何实体,因为这可能会导致未定义的行为。相反,建议使用Listener类作为信息通道,并使用上层Entity类来封装此类行为。
3.1.1.2.4 Status
每个实体都与一组状态对象相关联,这些状态对象的值表示该实体的通信状态。这些状态值的更改会触发调用相应的Listener回调以异步通知应用程序。有关所有状态对象的列表及其内容的描述,请参见状态。在那里,您还可以找到哪个状态适用于哪个实体类型。
3.1.1.2.5 StatusCondition
每个实体都有一个StatusCondition,每当其启用状态更改时,都会通知它。StatusCondition提供实体和等待集之间的链接。有关详细信息,请参阅“条件和等待集”一节。
3.1.1.2.6 启用实体
所有实体都可以创建为已启用或未启用。默认情况下,工厂被配置为创建已启用的实体,但可以对已启用的工厂使用EntityFactoryQosPolicy进行更改。禁用的工厂创建禁用的实体,而不管其QoS如何。禁用实体的操作仅限于以下操作:
- Set/Get 实体的QoS策略
- Set/Get 实体监听器
- Create/Delete 子实体
- 得到实体的状态,即使他们没有改变
- 查找操作
在这种状态下调用的其他函数都会返回NOT_ENABLED.
相关文章:

FastDDS-3. DDS层
3. DDS层 eProsima Fast DDS公开了两个不同的API,以在不同级别与通信服务交互。主要API是数据分发服务(DDS)数据中心发布订阅(DCPS)平台独立模型(PIM)API,简称DDS DCPS PIM…...

9.2 IGMPv2
实验目的 (1) 熟悉IGMPv2的应用场景 (2) 掌握IGMPv2的配置方法 实验拓扑 实验拓扑如图9-17所示: 图9-17:IGMPv2 实验步骤 配置IP地址(请参考上一个实验)运行IGPÿ…...

巨头混战,抢着“兜底”自动驾驶安全
诚然,中国汽车行业的发展绝对不会拘泥于电动化,必定会在电动化的基础上,迎接下半场的快速智能化。 2021年6月,长城汽车线控底盘全球首次发布。 彼时,长城汽车技术副总裁宋东先宣布,整合了线控转向、线控制…...
RightCapital 第一轮面试题
现在我们就马上开始吧! 答案在文末 JavaScript 是一门单线程的静态类型语言(单选题) 正确 错误 在 JavaScript 中下面哪种类型的值是不可变的(immutable)(单选题) Object Symbol Array Date …...

Python曲线肘部点检测-膝部点自动检测
文章目录一. 术语解释二. 拐点检测肘部法则是经常使用的法则。很多时候,可以凭人工经验去找最优拐点,但有时需要自动寻找拐点。最近解决了一下这个问题,希望对各位有用。一. 术语解释 **肘形曲线(elbow curve)**类似人胳膊状的曲线ÿ…...

【算法题】最大矩形面积,单调栈解法
力扣:84. 柱状图中最大的矩形 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 题意很简单,翻译一下就是:求该图中…...

活动策划|深度分析年货节活动该如何策划!
四月初,不平凡的初春开始恢复往日的平静。对于新零售行业,疫情的缓解也逐渐平稳生态链的运转。2020年新零售的格局在洗礼后,业务的聚焦点也从前端促销转移到后端履约的体验闭环,同时很大程度的推进企业在危机公关下的应对。618大促…...

Idea启动遇到 Web server failed to start. Port 8080 was already in use. 报错
Idea启动遇到问题-记录 报错英文提示: APPLICATION FAILED TO START Description: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to liste…...
Python3中zip()函数知识点总结
1.引言 在本文中,我将带领大家深入了解Python中的zip()函数,使用它可以提升大家的工作效率。 闲话少说,我们直接开始吧! 2. 基础知识 首先,我们来介绍一些基础知识点: Python中的某些数据类型是不可变的…...

过滤器,监听器,拦截器的原理与在Servlet和Spring的应用
在Java Web的开发中,最原始和初期的学习都是从Servlet开始的,Servlet是Java最为耀眼的技术,也是Java EE的技术变革。目前大火主流的框架spring boot也的spring mvc部分也是基于拓展servlet完成的。回到之前的文章spring 实现了对servlet的封装…...
minio spring boot 秒传、分片上传、断点续传文件实现
此处后端使用的是前期封装的自定义starter,具体链接可参考:minio对象存储spring boot starter封装组件 这里主要针对前期封装的组件,做一个简单的应用,前端直传可查看之前的文章 秒传 秒传的逻辑比较简单,在前传上传…...

MTK平台使用Omnipeek分析空口协议讲解
讲解这个之前,我们先来了解下beacon/robe Request/Probe Response 三种帧 beacon帧 信标帧,由AP以一定的时间间隔周期性发出,以此来告诉外界自己无线网络的存在。 Beacon帧作为802.11中一个周期性的帧,Beacon周期调高,对应睡眠周期拉长,故节能(即越来休息100ms再起来…...

string和自动推断类型
欢迎来观看温柔了岁月.c的博客目前设有C学习专栏C语言项目专栏数据结构与算法专栏目前主要更新C学习专栏,C语言项目专栏不定时更新待C专栏完毕,会陆续更新C项目专栏和数据结构与算法专栏一周主要三更,星期三,星期五,星…...

【软件测试】从功能到自动化测试,测试人的进阶之路细节,这些必不可少......
目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 测试流程࿰…...

C语言青蛙跳台阶【图文详解】
青蛙跳台阶前言1. 题目介绍2. 解题思路3. 利用图片来演示青蛙跳台阶的原理4. 如何用C语言实现青蛙跳台阶前言 在本文,我们要与一只活泼可爱的小青蛙合作,带领着它跳上台阶,这个小家伙精力充沛,特别擅长于跳跃。我们要让它做我们的…...
笔记(五)——list容器的基础理论知识
list容器是一个双向链表容器,可以高效地进行插入删除元素,但是不能随机存取元素(不支持at()和[]操作符)。一、list容器的对象构造方法list对象采用模板类的默认构造形式例如list<T> lst;#include<iostream>…...
浅谈网络中接口幂等性设计问题
所谓幂等性设计,就是说,一次和多次请求某一个资源应该具有同样的副作用。用数学的语言来表达就是:f(x) f(f(x))。 在数学里,幂等有两种主要的定义。 在某二元运算下,幂等元素是指被自己重复运算(或对于函数…...

《C Primer Plus》第13章复习题与编程练习
《C Primer Plus》第13章复习题与编程练习复习题1. 下面的程序有什么问题?2. 下面的程序完成什么任务?(假设在命令行环境中运行)3. 假设程序中有下列语句:4. 编写一个程序,不接受任何命令行参数或接受一个命…...

计算机SCI论文应该怎么作图? - 易智编译EaseEditing
计算机SCI论文,作图时要注意以下几个方面的问题: 1.图片的格式要tiff或者eps; 2.文件大小不能超过10M; 3.长和宽也给出了具体要求; 4.色彩模式要RGB或者灰度图; 5.文中的文字字体和大小; …...

【一】kubernetes集群部署
一、docker环境搭建 1、移除以前docker相关包 sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine2、配置yam源 sudo yum install -y yum-utilssudo yum-config-manager --ad…...

接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...

Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...
Go语言多线程问题
打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...
2025年低延迟业务DDoS防护全攻略:高可用架构与实战方案
一、延迟敏感行业面临的DDoS攻击新挑战 2025年,金融交易、实时竞技游戏、工业物联网等低延迟业务成为DDoS攻击的首要目标。攻击呈现三大特征: AI驱动的自适应攻击:攻击流量模拟真实用户行为,差异率低至0.5%,传统规则引…...
从零手写Java版本的LSM Tree (一):LSM Tree 概述
🔥 推荐一个高质量的Java LSM Tree开源项目! https://github.com/brianxiadong/java-lsm-tree java-lsm-tree 是一个从零实现的Log-Structured Merge Tree,专为高并发写入场景设计。 核心亮点: ⚡ 极致性能:写入速度超…...