这段文本讨论了Listening Locators的概念,它们在DomainParticipant中用于接收传入的网络流量。下面是对内容的详细解释:
1. Listening Locators
Listening Locators根据通信类型和数据性质进行分类:
通信类型:
- Multicast locators:用于监听多播通信。
- Unicast locators:用于监听单播通信。
数据性质:
- Metatraffic locators:接收元流量信息,通常由内置端点使用以执行发现(Discovery)。
- User locators:由用户创建的端点使用,以接收用户主题的数据变化。
应用程序可以提供自己的Listening Locators,或者使用eProsima Fast DDS提供的默认Listening Locators。
2. 添加Listening Locators
用户可以通过DomainParticipantQos
向DomainParticipant添加自定义Listening Locators。Locator的位置决定了它被视为多播、单播、用户或元流量Locator。
注意事项:
- UDP和TCP单播Locators支持使用空地址。在这种情况下,Fast DDS会自动获取并使用本地网络地址。
- UDP和TCP Locators支持使用零端口。这时,Fast DDS会自动计算并使用该类型流量的知名端口。
- TCP不支持多播场景,因此需要谨慎规划网络架构。
3. 示例代码
以下是不同类型Locator的示例代码:
3.1 Metatraffic Multicast Locators
DomainParticipantQos qos;
// 创建一个用于UDPv4端口22222监听239.255.0.1多播地址的Socket Locator
eprosima::fastdds::rtps::Locator_t locator;
IPLocator::setIPv4(locator, 239, 255, 0, 1);
locator.port = 22222;
// 将此Locator添加到DomainParticipantQos中
qos.wire_protocol().builtin.metatrafficMulticastLocatorList.push_back(locator);
3.2 Metatraffic Unicast Locators
DomainParticipantQos qos;
// 创建一个用于UDPv4端口22223监听192.168.0.1单播地址的Socket Locator
eprosima::fastdds::rtps::Locator_t locator;
IPLocator::setIPv4(locator, 192, 168, 0, 1);
locator.port = 22223;
// 将此Locator添加到DomainParticipantQos中
qos.wire_protocol().builtin.metatrafficUnicastLocatorList.push_back(locator);
3.3 User-Traffic Multicast Locators
DomainParticipantQos qos;
// 创建一个用于UDPv4端口22224监听239.255.0.1多播地址的Socket Locator
eprosima::fastdds::rtps::Locator_t locator;
IPLocator::setIPv4(locator, 239, 255, 0, 1);
locator.port = 22224;
// 将此Locator添加到DomainParticipantQos中
qos.wire_protocol().default_multicast_locator_list.push_back(locator);
3.4 User-Traffic Unicast Locators
DomainParticipantQos qos;
// 创建一个用于UDPv4端口22225监听192.168.0.1单播地址的Socket Locator
eprosima::fastdds::rtps::Locator_t locator;
IPLocator::setIPv4(locator, 192, 168, 0, 1);
locator.port = 22225;
// 将此Locator添加到DomainParticipantQos中
qos.wire_protocol().default_unicast_locator_list.push_back(locator);
这些代码展示了如何设置不同类型的Locators并将其添加到DomainParticipantQos
配置中,从而使得DDS系统能够处理各种类型的数据传输需求。
内容由零声教学AI助手提供,问题来源于学员提问