Apollo:源码分析之Transmitter

文章详细介绍了Transmitter类及其子类IntraTransmitter、ShmTransmitter在通信系统中的作用。Transmitter包含序列号和消息信息,而IntraTransmitter依赖于IntraDispatcher进行进程内通信。ShmTransmitter利用共享内存实现进程间通信,通过SegmentPtr和NotifierPtr管理资源。RtpsTransmitter的部分实现涉及数据的写入和通知机制。
摘要由CSDN通过智能技术生成

Transmitter

Transmitter

cyber/transport/transmitter/transmitter.h

一个基类
在这里插入图片描述

Endpoint有如下数据成员:

数据类型变量名字说明
boolenabled_当前终端是否启用
Identityid_每一个终端都有独一无二的id
RoleAttributesattr_终端的属性,是一个proto文件

成员变量

Transmitter有如下数据成员:

数据类型变量名字说明
uint64_tseq_num_;当前消息的序列号,默认从0开始数
MessageInfomsg_info_;要转发的消息信息

MessageInfo是一个类,它有如下成员

数据类型变量名字说明
Identitysender_id_;要是这条消息的发送方id,就是继承来的Endpoint->id_
uint64_tchannel_id_ = 0;这条消息需要放入哪个channel
uint64_t sseq_num_ = 0;当前消息的序列号,与当前Transmitter的类成员seq_num_一致
Identityspare_id_;

重要函数

在这里插入图片描述
在这里插入图片描述
从上面可以看到,具体的转发工作由它的子类完成。

但是需要关注一下 PerfEventCache。这个稍后再讲

IntraTransmitter

指针传递,进程内通信

在这里插入图片描述

成员变量

数据类型变量名字说明
unit64_tchannel_id_
IntraDispatcherPtrdispatcher_

重要函数

重点关注 IntraTransmitter< M>::Transmit即可,其他暂时不需要关注:

在这里插入图片描述
可以看到重要工作都是由 IntraDispatcherPtr完成的,这里只是起一个转发的作用

ShmTransmitter

共享内存,进程间通信

在这里插入图片描述

成员变量

数据类型变量名字说明
SegmentPtrsegment_
  • 负责管理一段共享内存
  • 提供了一些接口可以确保在线程安全的前提下拿到共享内场中的对象
  • 当每次 ShmTransmitter< M >::Enable()时如果没有初始化那么就 segment_ = SegmentFactory::CreateSegment(channel_id_); 当disable时就销毁
uint64_tchannel_id_
  • 构造函数中指定:channel_id_(RoleAttributes.channel_id())
uint64_thost_id_
  • 当前主机的ip地址,
  • 构造函数中指定:host_id_ = common::Hash(RoleAttributes.host_ip());
NotifierPtrnotifier_
  • 当每次 ShmTransmitter< M >::Enable()时如果没有初始化那么就 notifier_ = NotifierFactory::CreateNotifier();当disable时就销毁

重要函数

重点关注 ShmTransmitter< M>::Transmit即可,其他暂时不需要关注:

在这里插入图片描述

实现:

  1. 申请空间
    在这里插入图片描述

  2. 写入数据
    在这里插入图片描述

  3. 通知 or 记录了刚刚写入的数据信息,以后可以通过readableinfo来读取数据
    在这里插入图片描述

RtpsTransmitter

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值