FastDDS
知识讲解
1.1 DCPS 概念模型介绍
Publisher
Subscriber
Topic:在DDS域中是唯一的。
Domain:domain ID标识一个DDS Domain,DomainParticipant定义domain ID来指定它所属的DDS域。两个具有不同ID的domainParticipant不知道对方在网络中的存在。因为,可以创建多个通信信道,这适用于涉及多个DDS应用程序的场景。
1.2 RTPS 介绍
实时发布订阅协议,支持DDS应用程序,基于UDP/IP。Fast DDS提供了对TCP和共享内存(SHM)传输的支持。
同时支持单播/多播通信。
多个domain可以同时独立的共存。
topic不属于特定的participant。participant通过rtpsWriter对topic下发布的数据进行更改,并通过rtpsReaders接收订阅topic的数据。通信单元成为change。数据的更改注册到history(一个用作近期更改缓存的数据结构)。
更改1个数据需要的步骤:
change增加到RtpsWriter的history的缓存中
rtpsWriter发送change到所有订阅它的rtpsReaders
接收数据后,rtpsReaders更新history到缓存中
1.3 Fast DDS介绍
1.3.1 架构
架构图如下:
注:publisher通过dataWriter发布数据,将数据写入传输层,可以创建或者配置1个或者多个dataWriter;—> dataWriter负责发布数据,通过将数据作为DataWriterHistory的更改写入来完成发布;—> DataWriterHistory是一个数据更改的列表,当dataWriter在某个topic下要发布数据,就会在这个数据对象里面创建一个change,这个change是在history里面注册的,dataReader订阅该topic的数据就是把这一系列的change发送出去;—> subscriber是通过dataReader订阅数据的,可以创建或者配置1个或者多个dataReader; —> dataReader在其、historyDataReader中接收更改的消息;—>dataReaderHistory中包含dataReade由于订阅某个topic而接收到的数据的一些列的change。
1.3.2 并发和多线程
每个domainParticipant生成一组线程来处理多个后台任务,如日志记录、消息接收和异步通信。
主线程:由应用程序管理
事件线程:每个domainParticipant都包含1个,它处理周期性或者时间触发的事件
异步写线程:管理domainParticipant的异步writer,即使是同步writer,某些形式的通信也必须在后台启动
接收线程(多个):domainParticipant为每个接收信道都生成一个线程
有1个时间事件系统,使Fast DDS能够响应某些条件,并安排定期操作。
1.3.3 发现协议(Discovery Protocols)
Simple Discovery :默认的
Discovery Server:集中发现架构
Static Discovery:对domainParticipant的发现
Manual Discovery:只应用于RTPS层,允许用户手动匹配或者解除匹配RTPS Participants/RTPSWriters/RTPSReaders
1.3.4 安全(Security)
远程DomainParticipant的鉴权 DDS:Auth:PKI-DH
实体的访问控制 DDS:Access:Permissions
数据加密 DDS:Crypto:AES-GCM-GMAC
1.3.5 日志(Logging)
定义了三种类型,logInfo、logWarning、logError,允许新建分类
1.3.6 xml文件配置
通过xml文件可以更改默认配置,不需要用户实现任何程序源代码或重新构建现有的应用程序。