ZBLOG

15.5. Topics with many subscribers By default, every time a DataWriter publishes a data change on a Topic, it sends a unicast message for every DataReader that is subscribed to the Topic. If there are several DataReaders subscribed, it is recomme...

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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?