Publisher的创建与发送消息
发送消息的流程如下
DomainParticipant的创建
DomainParticipantFactory
该实例管理着当前进程创建的所有DomainParticipant,UML类图如下
其中的 participants_存储着DomainID到对应的Participant之间的映射
DomainParticipant
创建的DomainParticipant的UML类图如下,
该类继承了Entity,并且内部存在一个DomainParticipantImpl的指针完成所有的participant功能(piml用法),继承的Entity的UML类图如下
,Entity类是DataReader。Writer,Participant等类的父类。内部存储着Status
DomainParticipantImpl
IMPL完成了DomainParticipant接口的功能,其UML类图如下
其中包含了一个MyRTPSParticipantListener的类,该类完成RTPS层中的participant的discovery相应回调的注册,UML类图如下
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中对通信接口的抽象如下
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