首页 > 编程语言 >Fast-DDS源码阅读笔记(四)-participant是如何创建的

Fast-DDS源码阅读笔记(四)-participant是如何创建的

时间:2025-01-06 23:24:40浏览次数:6  
标签:DomainParticipant participant DDS 创建 类图 源码 UML discovery

Publisher的创建与发送消息

发送消息的流程如下

img

DomainParticipant的创建

DomainParticipantFactory

该实例管理着当前进程创建的所有DomainParticipant,UML类图如下

img


其中的 participants_存储着DomainID到对应的Participant之间的映射

DomainParticipant

创建的DomainParticipant的UML类图如下,
img

该类继承了Entity,并且内部存在一个DomainParticipantImpl的指针完成所有的participant功能(piml用法),继承的Entity的UML类图如下
img
,Entity类是DataReader。Writer,Participant等类的父类。内部存储着Status

DomainParticipantImpl

IMPL完成了DomainParticipant接口的功能,其UML类图如下

img


其中包含了一个MyRTPSParticipantListener的类,该类完成RTPS层中的participant的discovery相应回调的注册,UML类图如下


img

DomainParticipant的使能

该部分会调用到具体的Impl的enable接口,并且创建rtps层的participant,participant的discovry机制存在以下几种

类型 说明
SIMPLE the Real-time Publish-Subscribe Protocol(RTPS)
CLIENT A user defined PDP subclass object must be provided in the attributes that deals with the discovery.Framework is not responsible of this object lifetime.
SERVER The participant will behave as a server concerning discovery operation.Discovery operation is volatile (discovery handshake must take place if shutdown).
BACKUP he participant will behave as a server concerning discovery operation.Discovery operation persist on a file (discovery handshake wouldn't repeat if shutdown).
SUPER_CLIENT he participant will behave as a client concerning all internal behaviour.Remote servers will treat it as a server and will share every discovery information.

在这个阶段将会创建participant的对外通信接口,包括PDP和EDP阶段使用到的uniport与multiport,fastdds中对通信接口的抽象如下

img

SharedMemTransport的实现方式以及其上的watchdog

在创建shm上的transport时,会创建一个SharedMemManager,该Manager会以5s的间隔侦听共享内存是否还alive(实际上就是侦听用于共享内存的file是否还存活),创建时会创建一个单例的WatchTask,该WatchTask会将自己注册到单例的SHMWatchDog中,SHMWatchDog执行WatchTask上的run,该run检测所有分配出去的segment的活性,底层的shm管理依赖boost库完成实际的分配

UDPport的实现

这个部分比较简单,创建socket以及open即完事

meta_traffic的setup(用于服务发现PDP与EDP)

在这个部分,创建一个7400(多播)和7410的端口(单播), 并且为之创建相应的recive resource,这个recive resource中含有真正的网络通信句柄(基于asio实现),端口以及规则如下

类型 计算方式
Metatrafic multicast PB + DG * domainID + offset0
Metatrafic unicast PB + DG * domainID + offset1 + PG *participantID
User multicast PB + DG * domainID + offset2
User unicast PB + DG * domainID + offset3 + PG * participantID

其中符号的值定义可查阅DDS官网

user_traffic的setup

创建一个7411的unicast端口

标签:DomainParticipant,participant,DDS,创建,类图,源码,UML,discovery
From: https://www.cnblogs.com/collin-chen/p/18537870

相关文章