15.5. 多订阅者的主题
默认情况下,每当一个数据写入者在某个主题上发布数据更改时,它会为每个订阅该主题的数据读取者发送一条单播消息。如果有多个数据读取者订阅同一主题,建议使用多播而不是单播。通过这样做,对于每个样本只需发送一个网络包,从而改善CPU和网络的使用效率。
这种解决方案可以通过UDP传输或共享内存传输(SHM)来实现。共享内存传输默认是多播,但仅在同一台机器上的数据写入者和数据读取者之间可用。而UDP传输需要一些额外的配置。下面的示例展示了如何设置DataReaderQos,以配置数据读取者使用UDP上的多播传输。关于如何在端点上配置本地和远程定位器的信息,可以参见RTPSEndpointQos。
注意
在某些场景中,多播通过UDP可能会出现问题,特别是在WiFi环境和具有多个网络链接的复杂网络中。
C++ 示例
DataReaderQos qos;
// 添加新的多播定位器,IP 为 239.255.0.4,端口为 7900
eprosima::fastdds::rtps::Locator_t new_multicast_locator;
eprosima::fastdds::rtps::IPLocator::setIPv4(new_multicast_locator, "239.255.0.4");
new_multicast_locator.port = 7900;
qos.endpoint().multicast_locator_list.push_back(new_multicast_locator);
XML 示例
<?xml version="1.0" encoding="UTF-8" ?>
<profiles xmlns="http://www.eprosima.com">
<data_reader profile_name="reader_xml_conf_multicast_locators_profile">
<multicastLocatorList>
<locator>
<udpv4>
<address>239.255.0.4</address>
<port>7900</port>
</udpv4>
</locator>
</multicastLocatorList>
</data_reader>
</profiles>
以上示例展示了如何配置多播定位器,以便优化对多个订阅者的消息传递效率。
内容由零声教学AI助手提供,问题来源于学员提问