ZBLOG

15.9. Unique network flows This section explains which APIs should be used on Fast DDS in order to have unique network flows on specific topics. Background Identifying a flow Requesting unique flows Example 15.9.1. Background IP networking ...

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 中,有两种方法可以选择数据读取器上的唯一监听定位器:

  1. 应用程序可以指定 DataReader 应该监听哪些定位器。这通过 RTPSEndpointQosDataReaderQos 中完成。在这种情况下,由应用程序负责确保所使用定位器的唯一性。

  2. 应用程序可以请求创建具有唯一监听定位器的数据读取器。这是通过包括属性 “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助手提供,问题来源于学员提问

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?