Fast DDS (2)

news2024/11/15 23:58:43

1、结构:

Fast DDS的架构如下图所示,可以看到以下不同环境的层模型:

  • 应用层:利用Fast DDS API 在分布式系统中实现通信的用户应用程序。
  • Fast DDS层:DDS 通信中间件的稳健实现。它允许部署一个或多个 DDS 域,其中同一域内的 DomainParticipants 通过在域主题下发布/订阅来交换消息。
  • RTPS层:实施实时发布-订阅 (RTPS) 协议 ,以实现与 DDS 应用程序的互操作性。该层充当传输层的抽象层。
  • 传输层:快速 DDS可用于各种传输协议,例如不可靠传输协议 (UDP)、可靠传输协议 (TCP) 或共享内存传输协议 (SHM)。
    在这里插入图片描述

2、DDS层:

Fast DDS的 DDS 层定义了通信的几个关键元素。用户将在其应用程序中创建这些元素,从而合并 DDS 应用程序元素并创建以数据为中心的通信系统。 Fast DDS遵循DDS规范,将这些涉及通信的元素定义为实体。DDS实体是支持服务质量配置 (QoS) 并实现侦听器的任何对象。

  • QoS:定义每个实体的行为的机制。
  • Listener:向实体通知应用程序执行期间可能发生的事件的机制。

下面列出了 DDS 实体及其描述和功能:

  • Domain:标识 DDS 域的正整数。每个DomainParticipant都会有一个分配的DDS域,以便同一域中的DomainParticipant可以通信,并隔离DDS域之间的通信。该值必须由应用程序开发人员在创建 DomainParticipants 时给出。
  • DomainParticipant:包含其他 DDS 实体(例如发布者、订阅者、主题和多主题)的对象。它是允许创建其包含的先前实体以及配置其行为的实体。
  • Publisher:发布者使用 DataWriter 发布主题下的数据,DataWriter 将数据写入传输。它是创建和配置其包含的 DataWriter 实体的实体,并且可能包含其中一个或多个。
  • DataWriter:它是负责发布消息的实体。用户在创建该实体时必须提供一个主题,该主题将作为发布数据的主题。发布是通过将数据对象写入 DataWriterHistory 中的更改来完成的。
  • DataWriterHistory:这是数据对象更改的列表。当 DataWriter 继续在特定主题下发布数据时,它实际上会在此数据中创建更改。正是这种变化被记录在历史中。然后,这些更改将发送到订阅该特定主题的 DataReader。
  • Subscriber:订阅者使用 DataReader 订阅主题,DataReader 从传输中读取数据。它是创建和配置其包含的 DataReader 实体的实体,并且可能包含一个或多个 DataReader 实体。
  • DataReader:它是订阅主​​题以接收出版物的实体。用户在创建该实体时必须提供订阅Topic。DataReader 接收其 HistoryDataReader 中发生更改的消息。
  • DataReaderHistory:它包含DataReader 由于订阅某个主题而收到的数据对象的更改。
  • Topic:将发布者的 DataWriter 与订阅者的 DataReader 绑定的实体。

3、RTPS层:

如上所述,Fast DDS中的 RTPS 协议允许从传输层抽象 DDS 应用实体。根据上图,RTPS 层有四个主要Entities。

  • RTPSDomain:它是DDS域对RTPS协议的扩展。
  • RTPSParticipant:包含其他 RTPS 实体的实体。它允许配置和创建它包含的实体。
  • RTPSWriter:消息的来源。它读取 DataWriterHistory 中写入的更改,并将它们传输到之前匹配的所有 RTPSReader。
  • RTPSReader:消息的接收实体。它将 RTPSWriter 报告的更改写入 DataReaderHistory 中。

4、传输层:

Fast DDS支持通过各种传输协议实施应用程序。它们是 UDPv4、UDPv6、TCPv4、TCPv6 和共享内存传输 (SHM)。默认情况下,DomainParticipant 实现 UDPv4 和 SHM 传输协议。

5、并发和多线程:

Fast DDS实现了并发多线程系统。每个 DomainParticipant 都会生成一组线程来处理后台任务,例如日志记录、消息接收和异步通信。这不会影响您使用该库的方式,即Fast DDS API 是线程安全的,因此您可以无所畏惧地从不同线程调用同一 DomainParticipant 上的任何方法。但是,当外部函数访问由库内部运行的线程修改的资源时,必须考虑这种多线程实现。一个示例是实体侦听器回调中修改的资源。
Fast DDS 生成的完整线程集如下所示。仅当使用适当的传输时才会创建与传输相关的线程(标记为 UDP、TCP 和 SHM 类型)。

NameTypeCardinalityDescription
EventGeneral每个域参与者一个处理周期性和触发时间事件
Discovery Server EventGeneral每个域参与者一个同步对 Discovery Server数据库的访问
Asynchronous WriterGeneral每个启用的异步流量控制器一个最少 1。管理异步写入。即使对于同步写入器,某些形式的通信也必须在后台启动。
Datasharing ListenerGeneral每个数据读取器一个处理通过数据共享接收到的消息的侦听器线程
ReceptionUDP每个端口一个处理传入UDP 消息的侦听器线程
ReceptionTCP每个端口一个处理传入TCP 消息的侦听器线程
Keep AliveTCP每个端口一个保持 TCP 连接的活动线程。
ReceptionSHM每个端口一个通过 SHM 段处理传入消息的侦听器线程
LoggingSHM每个 SHM 描述符一个将传输的数据包存储并转储到文件中。
WatchdogSHM监视打开的共享内存段的运行状况。
General LoggingLog累积并写入适当的消费者日志条目。
Security LoggingLog每个域参与者一个累积并写入安全日志条目。
WatchdogFilewatch跟踪监视文件的修改状态
CallbackFilewatch当监视的文件更改时运行注册的回调

其中一些线程仅在满足某些条件时才会产生:

  • 仅当使用数据共享时才会创建数据共享侦听器线程。
  • 仅当 DomainParticipant 配置为 Discovery Server SERVER 时,才会创建 Discovery Server 事件线程。
  • TCP 保活线程要求保活周期配置为大于零的值。
  • 安全日志记录和共享内存数据包日志记录线程都需要启用某些配置选项。
  • 仅当使用FASTDDS_ENVIRONMENT_FILE时才会生成文件监视线程。

关于传输线程,Fast DDS 默认使用 UDP 和共享内存传输。可以配置端口配置以满足部署的特定需求,但默认配置是始终使用元流量端口和单播用户流量端口。这适用于 UDP 和共享内存,因为 TCP 不支持多播。

6、发现协议:

发现协议定义了在给定主题下发布的 DataWriter 和订阅同一主题的 DataReader 进行匹配的机制,以便它们可以开始共享数据。这适用于沟通过程中的任何时刻。 Fast DDS提供以下发现机制:

  • 简单的发现:这是默认的发现机制,在RTPS 标准中定义 ,并提供与其他 DDS 实现的兼容性。这里,DomainParticipants 在早期阶段被单独发现,以便随后匹配它们实现的 DataWriter 和 DataReader。
  • 发现服务器:这种发现机制使用集中式发现架构,其中服务器充当元流量发现的中心。
  • 静态发现:这实现了 DomainParticipant 之间的发现,但如果远程 DomainParticipant 事先知道这些实体,则可以跳过每个 DomainParticipant (DataReader/DataWriter) 中包含的实体的发现。
  • 手动发现:该机制仅与RTPS层兼容。它允许用户使用其选择的任何外部元信息通道手动匹配和取消匹配 RTPSParticipants、RTPSWriters 和 RTPSReaders。

7、安全:

Fast DDS可配置为通过在三个级别实现可插拔安全性来提供安全通信:

  • 远程域参与者的身份验证:DDS :Auth:PKI-DH插件使用受信任的证书颁发机构 (CA) 和 ECDSA 数字签名算法提供身份验证来执行相互身份验证。它还使用椭圆曲线 Diffie-Hellman (ECDH) 密钥协商协议建立共享密钥。
  • 实体的访问控制:DDS :Access:Permissions插件在 DDS 域和主题级别提供对 DomainParticipants 的访问控制。
  • 数据加密:DDS :Crypto:AES-GCM-GMAC插件使用伽罗瓦计数器模式 (AES-GCM) 中的高级加密标准 (AES) 提供经过身份验证的加密。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/907198.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

css 实现电梯导航

实现原理&#xff1a;利用css实现电梯导航很简单&#xff0c;基本原理就是通过a标签绑定跳转目标的id来实现的 html代码&#xff1a; <div class"body"><div class"top" id"top"></div><div class"con1" id"…

[Docker] Portainer + nginx + AList 打造Docker操作三板斧

Portainer : Docker容器图形化管理系统nginx: 反向代理利器AList: 文件管理系统 1. 安装 ##### portainer ##### # 拉取镜像 portainer 注: ce 社区版 ee 企业版 原项目(portainer/portainer)已弃用 docker pull portainer/portainer-ce # 运行容器 docker run -d --name por…

如何编写系统要求规范(SRS)文档

想象一下&#xff0c;你负责设计一座17层的大楼&#xff0c;但是蓝图丢失了。在没有这个关键文件的情况下&#xff0c;整个项目可能会因严重错误而处于风险之中。软件项目也有类似的情况&#xff0c;如果没有蓝图&#xff0c;你可能会生开发出缺乏必要软件功能并且与客户需求不…

【Apollo】阿波罗自动驾驶技术:引领汽车行业革新

前言 Apollo (阿波罗)是一个开放的、完整的、安全的平台&#xff0c;将帮助汽车行业及自动驾驶领域的合作伙伴结合车辆和硬件系统&#xff0c;快速搭建一套属于自己的自动驾驶系统。 开放能力、共享资源、加速创新、持续共赢是 Apollo 开放平台的口号。百度把自己所拥有的强大、…

Python爬取Google高清遥感瓦片地图

Python爬取Google高清遥感瓦片地图 这是一个能直接从Google地图服务下载瓦片地图的程序&#xff0c;非常稳定&#xff0c;只需要设置需要下载的左上角和右下角的经纬度坐标即可下载。当然总所周知的原因&#xff0c;下载google地图需要先打开梯子。 下面放上一个下载的高清遥感…

【数据结构】回溯算法公式化解题 leetcode经典题目带刷:全排列、组合、子集

目录 回溯算法一、什么是回溯算法1、基本思想&#xff1a;2、一般步骤&#xff1a; 二、题目带练1、全排列2、组合3、子集 三、公式总结 回溯算法 一、什么是回溯算法 回溯算法&#xff08;Backtracking Algorithm&#xff09;是一种解决组合问题、排列问题、选择问题等一类问…

Python“牵手”淘宝商品详情数据采集方法,淘宝API申请步骤说明

淘宝平台API接口是为开发电商类应用程序而设计的一套完整的、跨浏览器、跨平台的接口规范。 淘宝API接口是指通过编程的方式&#xff0c;让开发者能够通过HTTP协议直接访问淘宝平台的数据&#xff0c;包括商品信息、店铺信息、物流信息等&#xff0c;从而实现淘宝平台的数据开…

Android开发基础知识总结(一)初识安卓Android Studio

一.基础理论知识 1.Linux相当于是地基。 MIUI&#xff0c;EMUI等操作系统&#xff0c;是基于安卓的改版——且裁掉了一部分Google的服务。 &#xff08;鸿蒙虽然是改版&#xff0c;但和安卓的架构基本上一致&#xff09; 2.Kotlin和Java都是JVM语言&#xff0c;必须先复习好…

Python数据分析实战-给定JSON格式的数据提取所需字段并转换为DataFrame(附源码和实现效果)

实现功能 给定JSON格式的数据提取所需字段并转换为DataFrame 实现代码 import pandas as pd import json# 假设给定的JSON数据已经存储在data变量中 data [{"title": "Data Source Adapter for Excel Sheets","project_code_url": "htt…

Mac下Jmeter安装及基本使用

本篇文章只是简单的介绍下Jmeter的下载安装和最基本使用 1、初识Jmeter 前一段时间客户端app自测的过程中&#xff0c;有偶现请求某个接口返回数据为空的问题&#xff0c;领导让我循环100次请求这个接口&#xff0c;看看有没有结果为空的问题。听同事说有Jmeter的专业测试工具…

Java数据结构学习和源码阅读(线性数据结构)

线性数据结构 链表 LinkList 链表的数据结构 一组由节点组成的数据结构&#xff0c;每个元素指向下一个元素&#xff0c;是线性序列。 最简单的链表结构&#xff1a; 数据指针&#xff08;存放执行下一个节点的指针&#xff09; 不适合的场景&#xff1a; 需要循环遍历将…

【C++】 使用红黑树模拟实现STL中的map与set

文章目录 前言1. 对之前实现的红黑树进行一些补充和完善1.1 析构1.2 查找 2. STL源码中map和set的实现3. 改造红黑树封装map和set3.1 红黑树结构修改3.2 map、set的结构定义3.3 insert的封装3.4 insert测试3.5 发现问题并解决3.6 红黑树迭代器实现3.7 封装set和map的迭代器并测…

uniapp scroll-view横向滚动无效,scroll-view子元素flex布局不生效

要素排查&#xff1a; 1.scroll-x属性需要开启&#xff0c;官方类型是Boolean&#xff0c;实际字符串也行。 2scroll-view标签需要给予一个固定宽度&#xff0c;可以是百分百也可以是固定宽度或者100vw。 3.子元素需要设置display: inline-block&#xff08;行内块元素&#x…

国标GB28181视频平台EasyGBS通过对应密钥上传到其他平台展示的详细步骤来啦!

国标GB28181协议视频平台EasyGBS是基于国标GB28181协议的视频云服务平台&#xff0c;支持多路设备同时接入&#xff0c;并对多平台、多终端分发出RTSP、RTMP、FLV、HLS、WebRTC等格式的视频流。平台可提供视频监控直播、云端录像、云存储、检索回放、智能告警、语音对讲、平台级…

项目管理实战笔记:硬技能(下)

需求变更&#xff1a; pmp里面涉及需求变更的很多&#xff0c;尤其是CCB 对于CCB的需求变更&#xff0c;可能需要以下步骤&#xff1a; 1. 确定变更的原因和必要性&#xff1a;需要了解变更是因为业务需求的变化、技术方案的变更还是其他原因&#xff0c;以及变更是否是必要的…

内行才知道的新闻稿发布技巧,媒介盒子为你揭秘

不知道最近其他小伙伴有没有遇上以上说的一些情况&#xff0c;必须借助新闻稿发布达到营销推广的目的。 可是对于新闻稿发布这一块却不知道应该怎么办&#xff0c;尤其是新手上任&#xff0c;对于如何发布新闻稿是一头雾水。 新闻稿的发布是企业在公关传播中重要的一环&#…

如何将PDF文件转换为PPT文件?

如何将pdf转换成ppt&#xff1f;PDF文件作为常用的文件格式&#xff0c;不仅可以在教学过程中使用&#xff0c;还可以在营销展会、培训讲座等过程中使用。欧迪芬文件的使用&#xff0c;能够在一定程度上提升我们的办公效率。对于PDF文件来说&#xff0c;其中包含的元素非常多&a…

【算法刷题之数组篇(2)】

目录 1.leetcode-35. 搜索插入位置&#xff08;简单&#xff09;2.leetcode-74. 搜索二维矩阵&#xff08;中等&#xff09;3.leetcode-73. 矩阵置零&#xff08;中等&#xff09;4.leetcode-56. 合并区间&#xff08;中等&#xff09;5.leetcode-54. 螺旋矩阵&#xff08;中等…

水溶性试剂Hexynoic acid STP ester,炔酸STP酯,NHS酯的极好替代品

产品简介&#xff1a;炔酸STP酯是一种具有末端炔丙基和STP酯基的水溶性试剂。STP酯是在水性环境中进行偶联反应的传统N-羟基琥珀酰亚胺&#xff08;NHS&#xff09;酯的极好替代品。炔丙基通过铜催化的叠氮化物-炔烃点击化学与含叠氮化物的化合物或生物分子反应&#xff0c;产生…

leetcode303. 区域和检索 - 数组不可变(java)

前缀和数组的应用 区域和检索 - 数组不可变题目描述前缀和数组代码演示 区域和检索 - 数组不可变 难度 - 简单 原题链接 - 区域和检索 - 数组不可变 题目描述 给定一个整数数组 nums&#xff0c;处理以下类型的多个查询: 计算索引 left 和 right &#xff08;包含 left 和 righ…