eProsima Fast RTPS中的对象是按模块划分的。
RTPS标准的上层抽象,有以下几个结构:
Domain(域):用于创建、管理、销毁高层的Participant
Pariticipant(参与者):包含多个Publisher和Subscriber,并管理它们的配置
ParticipantAttributes:创建Participant的配置参数
ParticipantListener:在Participant范围内实现回调函数
Publisher(发布者):发送 topic 数据
PublisherAttributes:创建Publisher的配置参数
PublisherListener:在Publisher范围内实现回调函数
Subscriber(订阅者):接收订阅的topic数据
SubscriberAttributes:创建Subscriber的配置参数
SubscriberListener:在Subscriber范围内实现回调函数
对应于RTPS标准,可以直接与RTPS实体交互。包含几个子模块:
1. RTPS Common 模块
CacheChange_t:表示Topic的一个Change,存储在History缓冲队列中。
Data:Change消息体,可为空
Message:定义了RTPS消息的组织结构
Header:RTPS协议消息的标准头,包含vendor id(供应商 ID)
Sub-Message Header:RTPS子消息标识符,一个RTPS消息可以包含几个子消息。
MessageReceiver:反序列化、解释、分发RTPS消息
RTPSMessageCreator:构建封装RTPS消息
2. RTPS Domain 模块
RTPSDomain:用于创建、管理、销毁低层RTPSParticipant
RTPSParticipant:包含多个RTPS Writer和Reader,并管理它们的配置
RTPSParticipantAttributes:创建RTPSParticipant的配置参数
PDPSimple:Participant Discovery Protocal(参与者发现协议,RTPS内置子协议),用于发现网络中的其他Participant。
EDPSimple:Endpoint Discovery Protocal(端点发现协议,RTPS内置子协议),用于发现网络中的其他Participant的EndPoint(即RTPSWriters 和 RTPSReaders)。
EDPStatic:EDPSimple的静态类,用于从用户文件中读取其他远程端点的信息
TimedEvent:周期任务、定时任务的基类
ResourceEvent:管理时间和动作驱动的事件的基类。
ReceiverResource:管理消息接收操作的基类。
SenderResource:管理消息发送操作的基类。
3. RTPS Reader 模块
RTPSReader:从网络中匹配的RTPSWriters接收消息的基类,分为StatelessReader和StatefulReader。
ReaderAttributes:创建RTPSReader的配置参数
ReaderHistory:存储接收到的Topic Change数据
ReaderListener:在Reader范围内实现回调函数
StatelessReader:高效模式的Reader,不提供消息确认。
StatefulReader:可靠模式的Reader,会向Writer发送消息确认。
WriterProxy:Writer的历史元素状态的镜像,用来判断哪些是没有被正确接收,需要重新发送的数据。
4. RTPS Writer 模块
RTPSWriter:向网络中匹配的RTPSReaderf发送消息的基类,分为StatelessWriter和StatefulWriter。
WriterAttributes:创建Subscriber的配置参数
WriterHistory:存储要发送的Topic Change数据,并安排发送
StatelessWriter:高效模式的Writer,不需要消息确认,也不会维护远程实体的信息。
StatefulWriter:可靠模式的Writer,需要Reader回复消息确认。支持Qos和内容过滤。
ReaderProxy:匹配Reader的历史元素的镜像。用于确保同步,并确定哪些是需要在给定时间重新发送的数据
ReaderLocator:定位Reader在网络中的位置
RTPS中使用的数据结构可以分为三种:
1. 全局数据结构
RTPS架构中主体部分用到的数据。例如,模块与最终用户共享的数据,如ReaderLocator、ReaderProxy、WriterProxy的数据
2. 内部数据结构
模块间交换的数据。如CacheChanges,RTPSWriter和RTPSReader都会用到这个数据结构修改History和创建RTPS消息
3. 临时数据结构
临时用到的数据。最重要最常用的就是RTPS消息,通过CacheChanges创建,并在发送之后销毁。