15.9. Unique Network Flows
这一部分解释了在使用 Fast DDS 时,如何在特定主题上实现唯一的网络流。
背景
识别流
请求唯一流
示例
15.9.1. 背景
IP 网络是目前主流的互联网技术。以太网、WiFi、4G/5G 通信都依赖于 IP 网络。
从给定源到目的地的 IP 数据包流被称为数据包流或简单流。使用某些网络设备(如路由器、交换机)时,可以配置该流的网络服务质量(QoS)。这些设备通常支持 3GPP/5QI 协议,以便将特定的网络 QoS 参数分配给特定流。请求特定网络 QoS 通常是在发送数据的端点进行,因为它通常拥有关于网络流的完整信息。
应用程序可能需要在不同主题上使用特定的网络 QoS 参数。这意味着一个应用程序应该能够:
- 确认通信中使用的流,以便正确配置网络设备。
- 在选定主题上使用特定流。
15.9.2. 识别一个流
5-元组是传统上用于3GPP启用设备上的唯一标识符。5-元组由五个参数组成:源 IP 地址、源端口、目的地 IP 地址、目的地端口和传输协议(例如,TCP/UDP)。
15.9.2.1. 定义
网络流:一组由中间件选择用于从 DataWriter 到 DataReader 的消息传输的网络资源元组,包括:
- 传输协议:UDP 或 TCP
- 传输端口
- Internet 协议:IPv4 或 IPv6
- IP 地址
网络流终端 (NFE):特定于 DataWriter 或 DataReader 的网络流部分。换句话说,每个网络流有两个 NFE;一个是 DataWriter 的,另一个是 DataReader 的。
15.9.2.2. APIs
Fast DDS 提供了获取指定 DataWriter 或 DataReader 使用的 NFE 列表所需的 API。
在 DataWriter 上,get_sending_locators()
方法允许应用程序获得可以发送数据的定位器列表。
在 DataReader 上,get_listening_locators()
方法允许应用程序获得监听中定位器列表。
15.9.3. 请求唯一流
通过确保至少其中一个 NFE 是唯一,可以创建独特的数据流。在 Fast DDS 中,有两种方法可以选择数据读取器上的唯一监听定位器:
应用程序可以指定 DataReader 应该监听哪些定位器。这通过
RTPSEndpointQos
在DataReaderQos
中完成。在这种情况下,由应用程序负责确保所使用定位器的唯一性。应用程序可以请求创建具有唯一监听定位器的数据读取器。这是通过包括属性 “fastdds.unique_network_flows” 的
PropertyPolicyQos
来完成。在这种情况下,读取器将在 RTPS 通常使用的端口范围之外监听一个独特端口。
15.9.4 示例
以下代码片段演示了本页面描述的所有 API:
// 创建 DataWriter
DataWriter* writer = publisher->create_datawriter(topic, DATAWRITER_QOS_DEFAULT);
if (nullptr == writer)
{
// 错误处理
return;
}
// 创建具有独特流程的数据读取器
DataReaderQos drqos = DATAREADER_QOS_DEFAULT;
drqos.properties().properties().emplace_back("fastdds.unique_network_flows", "");
DataReader* reader = subscriber->create_datareader(topic, drqos);
// 打印定位器信息
eprosima::fastdds::rtps::LocatorList locators;
writer->get_sending_locators(locators);
std::cout << "写入者正在从以下定位器发送:" << std::endl;
for (const auto& locator : locators)
{
std::cout << " " << locator << std::endl;
}
reader->get_listening_locators(locators);
std::cout << "阅读者正在监听以下定位器:" << std::endl;
for (const Locator_t& locator : locators)
{
std::cout << " " << locator << std::endl;
}
这个示例展示了如何创建数据写入者和具备独特流程的数据读取者,同时打印出它们各自使用的位置。
内容由零声教学AI助手提供,问题来源于学员提问