15.1.1. Large Data Mode
以下代码片段展示了如何配置 Fast DDS 的 DomainParticipants,以便在 PDP 发现阶段通过 UDP 多播运行,并通过 TCP 传输或共享内存传输进行应用数据通信,这种配置称为 LARGE_DATA 模式(参见管理内置传输)。使用这种方法,管理大样本的应用程序可以受益于通过 TCP 或 SHM 传输其数据,同时又具备自动发现的灵活性。可以使用环境变量 FASTDDS_BUILTIN_TRANSPORTS
、XML 配置文件或代码来设置 LARGE_DATA 模式。
环境变量示例
export FASTDDS_BUILTIN_TRANSPORTS=LARGE_DATA
注意:LARGE_DATA 内置传输配置将同时创建一个共享内存 (SHM) 传输,伴随 UDP 和 TCP 传输。在可能的情况下,将优先使用共享内存。如果需要在可用时强制使用 TCP 通信,则需要手动配置。
C++ 示例
eprosima::fastdds::dds::DomainParticipantQos pqos = PARTICIPANT_QOS_DEFAULT;
/* 传输配置 */
// 使用多播的 UDPv4 进行 PDP
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 和用户数据的定位器
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);
这段代码首先定义了参与者质量服务 (QoS),然后设置了两个不同类型的传输:一个用于 PDP 的 UDP 多播和另一个用于应用数据的 TCP。最后,它通过定义所需的定位器创建 DomainParticipant。这种配置使得系统能够在高效地处理大规模数据时保持良好的网络性能和可发现性。
内容由零声教学AI助手提供,问题来源于学员提问