ZBLOG

15.1.1. Large Data Mode The following snippets show how to configure Fast DDS DomainParticipants to run the PDP discovery phase over UDP multicast and communicate application data over a TCP Transport or Shared Memory Transport, which is called t...

15.1.1. 大数据模式

以下代码片段展示了如何配置 Fast DDS 的 DomainParticipants,使其在 UDP 多播上运行 PDP 发现阶段,并通过 TCP 传输或共享内存传输来通信应用数据,这种配置被称为“大数据模式”。通过这种方式,管理大型样本的应用程序可以受益于通过 TCP 或共享内存传输数据,同时具备自动发现的灵活性。大数据模式可以通过环境变量 FASTDDS_BUILTIN_TRANSPORTS、XML 配置文件或代码进行设置。

环境变量

export FASTDDS_BUILTIN_TRANSPORTS=LARGE_DATA

注意:大数据模式的内置传输还会创建一个共享内存(SHM)传输,与 UDP 和 TCP 传输并行使用。当可能时,会优先使用共享内存。如果需要在可行时使用 TCP 通信,则需要手动配置。

C++ 示例代码

eprosima::fastdds::dds::DomainParticipantQos pqos = PARTICIPANT_QOS_DEFAULT;

/* 传输配置 */
// 使用多播进行 PDP 的 UDPv4 传输
auto pdp_transport = std::make_shared<eprosima::fastdds::rtps::UDPv4TransportDescriptor>();
pqos.transport().user_transports.push_back(pdp_transport);

// 用于 EDP 和应用数据的 TCPv4 传输(同一主机中每个参与者的监听端口必须唯一)
constexpr uint16_t tcp_listening_port = 0;
auto data_transport = std::make_shared<eprosima::fastdds::rtps::TCPv4TransportDescriptor>();
data_transport->add_listener_port(tcp_listening_port);
pqos.transport().user_transports.push_back(data_transport);

pqos.transport().use_builtin_transports = false;

/* 定位器配置 */
// 定义用于多播的 PDP 定位器
eprosima::fastdds::rtps::Locator_t pdp_locator;
pdp_locator.kind = LOCATOR_KIND_UDPv4;
eprosima::fastdds::rtps::IPLocator::setIPv4(pdp_locator, "239.255.0.1");
pqos.wire_protocol().builtin.metatrafficMulticastLocatorList.push_back(pdp_locator);

// 定义用于 EDP 和用户数据的 TCP 定位器
eprosima::fastdds::rtps::Locator_t tcp_locator;
tcp_locator.kind = LOCATOR_KIND_TCPv4;
eprosima::fastdds::rtps::IPLocator::setIPv4(tcp_locator, "0.0.0.0");
eprosima::fastdds::rtps::IPLocator::setPhysicalPort(tcp_locator, tcp_listening_port);
eprosima::fastdds::rtps::IPLocator::setLogicalPort(tcp_locator, tcp_listening_port);
pqos.wire_protocol().builtin.metatrafficUnicastLocatorList.push_back(tcp_locator);
pqos.wire_protocol().default_unicast_locator_list.push_back(tcp_locator);

/* 按照正常方式创建参与者 */
eprosima::fastdds::dds::DomainParticipant* participant =
        eprosima::fastdds::dds::DomainParticipantFactory::get_instance()->create_participant(0, pqos); 

以上示例展示了如何在 C++ 中设置 Fast DDS,以便实现大规模数据通信,并同时利用多播进行发现。


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?