ZBLOG

3.1.2.2. eProsima Extensions The eProsima QoS Policies extensions are those that allow changing the values of the RTPS layer configurable settings. DataSharingQosPolicy DisablePositiveACKsQosPolicy RTPSReliableReaderQos RTPSReliableWriterQos ...

eProsima Extensions

eProsima 提供的 QoS(Quality of Service)策略扩展使得用户能够修改 RTPS 层的可配置设置。以下是一些关键的 QoS 策略扩展:

  • DataSharingQosPolicy
  • DisablePositiveACKsQosPolicy
  • RTPSReliableReaderQos
  • RTPSReliableWriterQos
  • FlowControllersQos
  • ParticipantResourceLimitsQos
  • PropertyPolicyQos
  • PublishModeQosPolicy
  • ReaderResourceLimitsQos
  • WriterResourceLimitsQos
  • RTPSEndpointQos
  • ThreadSettings
  • TransportConfigQos
  • WireProtocolConfigQos

DataSharingQosPolicy

该额外的 QoS 策略允许配置数据共享交付通信方式,具体可以参考“数据共享交付”部分,以获取其功能描述。

QoS 策略数据成员列表

数据成员 类型 访问器 默认值
数据共享种类 DataSharingKind kind() AUTO
共享内存目录 string shm_directory() 空字符串
最大域号 uint32_t max_domains() 0(无限制)
数据共享域 ID 列表 vector domain_ids()
数据共享监听线程设置 ThreadSettings data_sharing_listener_thread()

数据共享种类: 指定数据共享交付的行为。具体值及其效果见 DataSharingKind

共享内存目录: 用于映射文件的目录。如果未配置,则使用系统默认目录。

最大域号: 确定本地或远程端点中数据共享域 ID 的最大数量。与支持数据共享交付的远程端点之间会交换域 ID。如果该值小于任何远程端点 ID 列表的大小,则匹配可能会失败。值为零表示无限制。

数据共享域 ID: 当前 DataWriter 或 DataReader 配置的数据共享域 ID 列表。如果未提供,则系统将为当前机器创建一个唯一 ID。

数据共享监听线程设置: 专用于监听入站流量的数据共享线程的 ThreadSettings

注意:此 QoS 策略适用于 DataWriterDataReader 实体。它不能在启用状态下更改实体。

DataSharingKind

有三种可能的值(见 DataSharingKind):

  1. OFF: 禁用数据共享交付。不执行任何使用数据共享交付功能的通信。
  2. ON: 手动启用数据共享交付。如果当前主题与数据共享交付不兼容,将出现错误。与至少分享一个数据共享域 ID 的远程实体进行通信时,将使用数据分享传递功能。
  3. AUTO: 如果当前主题与数据分享兼容,将激活;如果不兼容,则禁用。

数据分享配置辅助函数

为了设置数据分享传递配置,必须使用以下辅助成员函数之一,每个类型都有相应的方法:

函数 结果的数据分享种类
automatic() AUTO
on() ON
off() OFF

可以通过 add_domain_id() 函数稍后添加这些助手函数中定义的数据分享域 IDs。当您添加新域 ID 时,会计入对 QosPolicy 的修改,因此必须在实体启用之前进行此操作。

示例代码

  1. // 此示例使用 DataWriter,但也适用于 DataReader 实体
  2. DataWriterQos writer_qos;
  3. // 数据分享默认为 AUTO,这意味着如果主题兼容,将使用该特性。
  4. // 如果未指定 Shared Memory 目录,则将使用默认路径。
  5. writer_qos.data_sharing().on("/path/to/shared_memory/directory"); // 启用并指定目录
  6. // 或者禁用它
  7. writer_qos.data_sharing().off();
  8. // 设置为自动,并定义两个用户自定义 IDs (也可用于 ON)
  9. std::vector<uint16_t> ids;
  10. ids.push_back(0x1234);
  11. ids.push_back(0xABCD);
  12. writer_qos.data_sharing().automatic(ids);
  13. // 或逐个添加它们
  14. writer_qos.data_sharing().add_domain_id(uint16_t(0x1234));
  15. writer_qos.data_sharing().add_domain_id(uint16_t(0xABCD));
  16. // 设置最大领域数为5,设置为0表示'无限'
  17. writer_qos.data_sharing().set_max_domains(5);
  18. // [可选] 监听线程的 ThreadSettings
  19. writer_qos.data_sharing().data_sharing_listener_thread(eprosima::fastdds::rtps::ThreadSettings{-1, 0, 0, -1});
  20. // 使用修改后的 QoS 创建相应实体
  21. writer_ = publisher_->create_datawriter(topic_, writer_qos);

以上就是关于 eProsima 的扩展、QoS 策略以及如何实现和配置这些策略的一些详细信息。这些机制可以帮助开发人员优化实时应用程序中的消息传递性能和可靠性。


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?