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助手提供,问题来源于学员提问