ZBLOG

eProsima Fast DDS allows to speed up communications between entities within the same process by avoiding any of the overhead involved in the transport layer. Instead, the Publisher directly calls the reception functions of the Subscriber. This not...

这段文本主要介绍了eProsima Fast DDS(数据分发服务)的一个功能——进程内通信(Intra-process delivery),并提供了一些相关的配置和实现细节。以下是对其内容的详细解释:

1. 进程内通信简介

  • 进程内通信:在同一进程中的不同实体(Publisher 和 Subscriber)之间进行直接通信,避免了运输层所带来的开销。这意味着发布者可以直接调用订阅者的接收函数,而无需经过常规的发送或复制操作,从而提高了效率。

2. 配置选项

通过XML配置文件,可以设置进程内交付特性。可用选项包括:

  • INTRAPROCESS_OFF:禁用该特性。
  • INTRAPROCESS_USER_DATA_ONLY:发现元数据仍然使用普通传输。
  • INTRAPROCESS_FULL:默认值,用户数据和发现元数据都使用进程内交付。

XML示例:

<library_settings>
    <intraprocess_delivery>FULL</intraprocess_delivery> <!-- OFF | USER_DATA_ONLY | FULL -->
</library_settings>

3. GUID前缀考虑事项

Fast DDS 使用 DomainParticipant 的 GUID 前缀 (GuidPrefix_t) 来识别运行在同一进程中的对等方。具体来说,如果两个参与者的 GUID 前缀前8个字节相同,它们就被认为是在同一个进程中,并且会使用进程内交付机制。

特别注意:

  • 如果在运行时网络接口发生变化,新创建的 DomainParticipant 将具有不同的 GUID 前缀,因此将被视为在另一个主机上运行,这可能影响到消息传递的方式。

4. 示例代码

示例代码展示了如何手动设置 GUID 前缀和创建 DomainParticipant:

// 定义并设置 GUID 前缀
eprosima::fastdds::rtps::GuidPrefix_t guid_prefix;
guid_prefix.value[0] = eprosima::fastdds::rtps::octet(0x77);
guid_prefix.value[1] = eprosima::fastdds::rtps::octet(0x73);
// ... (省略其他字节的赋值)
guid_prefix.value[11] = eprosima::fastdds::rtps::octet(0x79);

// 设置参与者QoS并应用修改后的 QoS 创建 DomainParticipant 实体
DomainParticipantQos participant_qos;
participant_qos.wire_protocol().prefix = guid_prefix;
participant_ = factory_->create_participant(domain, participant_qos);

在这个代码片段中,首先定义了一个 GuidPrefix_t 类型的变量,并为其赋予了一系列字节值,然后将其设置到 DomainParticipantQos 对象中,在创建参与者时使用该 QoS 设置。

总结

总之,这段文字详细描述了如何利用 Fast DDS 的进程内交付功能来优化同一进程中各个实体之间的通信,同时也提供了关于 GUID 前缀的重要信息,以确保正确地识别和管理这些参与者。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://sdn.0voice.com/?id=7250

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?