Fast DDS (2)
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 类型)。
Name | Type | Cardinality | Description |
---|---|---|---|
Event | General | 每个域参与者一个 | 处理周期性和触发时间事件 |
Discovery Server Event | General | 每个域参与者一个 | 同步对 Discovery Server数据库的访问 |
Asynchronous Writer | General | 每个启用的异步流量控制器一个最少 1。 | 管理异步写入。即使对于同步写入器,某些形式的通信也必须在后台启动。 |
Datasharing Listener | General | 每个数据读取器一个 | 处理通过数据共享接收到的消息的侦听器线程 |
Reception | UDP | 每个端口一个 | 处理传入UDP 消息的侦听器线程 |
Reception | TCP | 每个端口一个 | 处理传入TCP 消息的侦听器线程 |
Keep Alive | TCP | 每个端口一个 | 保持 TCP 连接的活动线程。 |
Reception | SHM | 每个端口一个 | 通过 SHM 段处理传入消息的侦听器线程 |
Logging | SHM | 每个 SHM 描述符一个 | 将传输的数据包存储并转储到文件中。 |
Watchdog | SHM | 一 | 监视打开的共享内存段的运行状况。 |
General Logging | Log | 一 | 累积并写入适当的消费者日志条目。 |
Security Logging | Log | 每个域参与者一个 | 累积并写入安全日志条目。 |
Watchdog | Filewatch | 一 | 跟踪监视文件的修改状态 |
Callback | Filewatch | 一 | 当监视的文件更改时运行注册的回调 |
其中一些线程仅在满足某些条件时才会产生:
- 仅当使用数据共享时才会创建数据共享侦听器线程。
- 仅当 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) 提供经过身份验证的加密。
相关文章:
Fast DDS (2)
1、结构: Fast DDS的架构如下图所示,可以看到以下不同环境的层模型: 应用层:利用Fast DDS API 在分布式系统中实现通信的用户应用程序。Fast DDS层:DDS 通信中间件的稳健实现。它允许部署一个或多个 DDS 域ÿ…...
HarmonyOS/OpenHarmony应用开发-ArkTS语言渲染控制if/else条件渲染
ArkTS提供了渲染控制的能力。条件渲染可根据应用的不同状态,使用if、else和else if渲染对应状态下的UI内容。说明:从API version 9开始,该接口支持在ArkTS卡片中使用。一、使用规则 支持if、else和else if语句。 if、else if后跟随的条件语句…...
飞天使-k8s基础组件分析-pod
文章目录 pod介绍pod 生命周期init 容器容器handlerpod中容器共享进程空间sidecar 容器共享 参考链接 pod介绍 最小的容器单元 为啥需要pod? 答: 多个进程丢一个容器里,会因为容器里个别进程出问题而出现蝴蝶效应,pod 是更高级的处理方式pod 如何共享相…...
css题库
什么是css? CSS 是“Cascading Style Sheet”的缩写,中文意思为“层叠样式表”,它是一种标准的样式表语言,用于描述网页的表现形式(例如网页元素的位置、大小、颜色等)。 为什么最好把 CSS 的 link 标签放在…...
中文医疗大模型汇总
【写在前面】随着大语言模型的发展,越来越多的垂直领域的LLM发不出来,针对医学这一垂直领域的LLM进行整理,放在这里,希望对大家有一定的帮助吧。还会继续更新,大家有兴趣的话可以持续关注。 更多关于中文医疗自然语言处…...
smiley-http-proxy-servlet 实现springboot 接口反向代理,站点代理,项目鉴权,安全的引入第三方项目服务
背景: 项目初期 和硬件集成,实现了些功能服务,由于是局域网环境,安全问题当时都可以最小化无视。随着对接的服务越来越多,部分功能上云,此时就需要有一种手段可以控制到其他项目/接口的访问权限。 无疑 反向…...
Java集合利器 Map Set
Map & Set 一、概念二、Map三、Set下期预告 一、概念 Map和Set是一种专门用来进行搜索的数据结构,其搜索的效率与其具体的实例化子类有关。它们分别定义了两种不同的数据结构和特点: Map(映射) :Map是一种键值对&…...
HJ106 字符逆序
描述 将一个字符串str的内容颠倒过来,并输出。 数据范围:1≤len(str)≤10000 1≤len(str)≤10000 输入描述: 输入一个字符串,可以有空格 输出描述: 输出逆序的字符串 示例1 输入: I am a student 输…...
sentinel的基本使用
在一些互联网项目中高并发的场景很多,瞬间流量很大,会导致我们服务不可用。 sentinel则可以保证我们服务的正常运行,提供限流、熔断、降级等方法来实现 一.限流: 1.导入坐标 <dependency><groupId>com.alibaba.c…...
【STM32】串口通信乱码(认识系统时钟来源)
使用 stm32f407 与电脑主机进行串口通信时,串口助手打印乱码,主要从以下方面进行排查: 检查传输协议设置是否一致(波特率、数据位、停止位、校验位)检查MCU外部晶振频率是否和库函数设置的一致 最终发现是外部晶振频…...
Java实现敏感词过滤功能
敏感词过滤功能实现 1.GitHub上下载敏感词文件 2.将敏感词文件放在resources目录下 在业务中可以将文本中的敏感词写入数据库便于管理。 3.提供实现类demo 代码编写思路如下:1.将敏感词加载到list中,2.添加到StringSearch中,3.校验&#x…...
大数据向量检索的细节问题
背景:现有亿级别数据(条数),其文本大小约为150G,label为字符串,content为文本。用于向量检索,采用上次的试验进行,但有如下问题需要面对: 1、向量维度及所需空间 向量维度一版采用768的bert系列的模型推理得到,openai也有类似的功能,不过是2倍的维度(即1536),至…...
如何让智能搜索引擎更灵活、更高效?
随着互联网的发展和普及,搜索引擎已经成为人们获取信息、解决问题的主要工具之一。 然而,传统的搜索引擎在面对大数据时,往往存在着搜索效率低下、搜索结果精准度不够等问题。 为了解决这些问题,越来越多的企业开始采用智能搜索技…...
C++set集合与并查集map映射,哈希表应用实例B3632 集合运算 1P1918 保龄球
集合的性质 无序性互异性确定性 B3632 集合运算 1 题面 题目背景 集合是数学中的一个概念,用通俗的话来讲就是:一大堆数在一起就构成了集合。 集合有如下的特性: 无序性:任一个集合中,每个元素的地位都是相同的&…...
easyexcel合并单元格底色
一、效果图 二、导出接口代码 PostMapping("selectAllMagicExport")public void selectAllMagicExport(HttpServletRequest request, HttpServletResponse response) throws IOException {ServiceResult<SearchResult<TestMetLineFe2o3Export>> result …...
OpenCV图片校正
OpenCV图片校正 背景几种校正方法1.傅里叶变换 霍夫变换 直线 角度 旋转3.四点透视 角度 旋转4.检测矩形轮廓 角度 旋转参考 背景 遇到偏的图片想要校正成水平或者垂直的。 几种校正方法 对于倾斜的图片通过矫正可以得到水平的图片。一般有如下几种基于opencv的组合方…...
数字孪生流域共建共享相关政策解读
当前数字孪生技术在水利方面的应用刚起步,2021年水利部首次提出“数字孪生流域”概念,即以物理流域为单元、时空数据为底座、数学模型为核心、水利知识为驱动,对物理流域全要素和水利治理管理活动全过程的数字映射、智能模拟、前瞻预演&#…...
FSC147数据集格式解析
一. 引言 在研究很多深度学习框架的时候,往往需要使用到FSC147格式数据集,若要是想在自己的数据集上验证深度学习框架,就需要自己制作数据集以及相关标签,在论文Learning To Count Everything中,该数据集首次被提出。 …...
el-element中el-tabs案例的使用
el-element中el-tabs的使用 代码呈现 <template><div class"enterprise-audit"><div class"card"><div class"cardTitle"><p>交易查询</p></div><el-tabs v-model"activeName" tab-cl…...
tomcat结构目录有哪些?
bin 启动,关闭和其他脚本。这些 .sh文件(对于Unix系统)是这些.bat文件的功能副本(对于 Windows系统)。由于Win32命令行缺少某些功能,因此此处包含一些其他文件。 比如说:windows下启动tomcat用的…...
生成式AI系列 —— DCGAN生成手写数字
1、模型构建 1.1 构建生成器 # 导入软件包 import torch import torch.nn as nnclass Generator(nn.Module):def __init__(self, z_dim20, image_size256):super(Generator, self).__init__()self.layer1 nn.Sequential(nn.ConvTranspose2d(z_dim, image_size * 32,kernel_s…...
vscode-vue项目格式化+语法检验-草稿
Vue学习笔记7 - 在Vscode中配置Vetur,ESlint,Prettier_vetur规则_Myron.Maoyz的博客-CSDN博客...
【Java从0到1学习】10 Java常用类汇总
1. System类 System类对读者来说并不陌生,因为在之前所学知识中,需要打印结果时,使用的都是“System.out.println();”语句,这句代码中就使用了System类。System类定义了一些与系统相关的属性和方法,它所提供的属性和…...
第三届人工智能与智能制造国际研讨会(AIIM 2023)
第三届人工智能与智能制造国际研讨会(AIIM 2023) The 3rd International Symposium on Artificial Intelligence and Intelligent Manufacturing 第三届人工智能与智能制造国际研讨会(AIIM 2023)将于2023年10月27-29日在成都召开…...
层次分析法
目录 一:问题的引入 二:模型的建立 1.分析系统中各因素之间的关系,建立系统的递阶层次结构。 2.对于同一层次的各元素关于上一层次中某一准则的重要性进行两两比较,构造两两比较矩阵(判断矩阵)。 3.由判…...
Error Handling
有几个特定的异常类允许用户代码对与CAN总线相关的特定场景做出反应: Exception (Python standard library)+-- ...+-- CanError (python-can)+-- CanInterfaceNotImplementedError+-- CanInitializationError...
leetcode:字符串相乘(两种方法)
题目: 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。 注意:不能使用任何内置的 BigInteger 库或直接将输入转换为整数。 示例 1: 输入: num1 "2", nu…...
【爬虫练习之glidedsky】爬虫-基础2
题目 链接 爬虫往往不能在一个页面里面获取全部想要的数据,需要访问大量的网页才能够完成任务。 这里有一个网站,还是求所有数字的和,只是这次分了1000页。 思路 找到调用接口 可以看到后面有个参数page来控制页码 代码实现 import reques…...
03.有监督算法——决策树
1.决策树算法 决策树算法可以做分类,也可以做回归 决策树的训练与测试: 训练阶段:从给定的训练集构造出一棵树(从根节点开始选择特征,如何进行特征切分) 测试阶段:根据构造出来的树模型从上…...
网络协议详解之STP
目录 一、STP协议(生成树) 1.1 生成树协议核心知识点: 1.2 生成树协议与导致问题: 生成树含义: 1.3 802.1D 规则: 802.1D 缺点: 1.4 PVST cisco私有 1.5 PVST 1.6 快速生成树 快速的原…...
做企业网站的字体大小要求/郑州厉害的seo顾问
[原文地址: http://blog.csdn.net/easwy/archive/2007/09/30/1807725.aspx ] 在windows上访问linux有多种方法: 对于习惯使用命令行的人来说,可以使用终端的方式进行访问,也就是通过telnet, ssh等方法远程登录到linux主机…...
六安做网站/上海网站排名seo公司哪家好
轻松加载excel、txt、csv数据可能大家在学习的过程中会拿到一些带有坐标点的空间数据,那我们就想看一下这些坐标点是如何分布的,今天我们就来分享如何在ArcGIS中加载excel、txt、csv数据,文末附视频教程和练习数据。我们提供的数据分别是餐饮…...
做网站的一般多少钱/手机怎么制作网页
转载:http://blog.csdn.net/universsky/article/details/8866402 linux中grep命令的使用 grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使…...
虚拟服务器怎样做网站/自媒体推广
这篇文章主要介绍了win2008 R2设置IP安全策略后在服务器内打开网站很慢或无法访问外部网站的原因,需要的朋友可以参考下win2008R2设置IP安全策略后在服务器内打开网站很慢速度只有几KB的原因是因为IP安全策略中的关闭策略中设置了原地址“任何IP”到目标地址“任何IP”的UDP任何…...
雄安微网站开发/企业推广策略
一. kali安装ssh服务 1.修改源 1 rootDGG:~# vi /etc/apt/sources.list2 deb http://http.kali.org/kali kali-rolling main non-free contrib 2.更新一下源 apt-get update 3.下载ssh服务包 apt-get install ssh 4.打开ssh服务 1 service ssh start 打开ssh服务 2 service …...
谷歌做网站推广/seo网络优化推广
这里是没有颜色的: /*** Created by 东东 on 2018/10/28.** Description 发送邮件部分接口*/ public interface MailService {/*** Description //TODO 发送简单的文本文件,to:收件人 subject:主题 content:内容* Param [to, subject, content]**/public void send…...