ZBLOG

15.11. Dynamic network interfaces DDS Simple Discovery relies on well-known multicast addresses and ports to relay the Participant announcement messages (see Discovery phases). Such Participant announcement includes information about the unicast ...

15.11. Dynamic Network Interfaces

DDS简单发现依赖于众所周知的多播地址和端口来转发参与者公告消息(请参见发现阶段)。该参与者公告包括有关单播地址-端口对(即定位符)的信息,参与者期望在这些地址上接收传入的元流量数据。此单播定位符列表是在启用Fast DDS DomainParticipant时自动初始化的,考虑到可用的网络接口。因此,任何在启用DomainParticipant之后添加的网络接口都应该通知Fast DDS,以便在该网络中初始化一个单播定位符,从而建立通过该新接口的通信。

15.11.1. 动态网络接口运行时添加

如果用户希望在运行时添加新的网络接口,则需要满足一些先决条件。一旦可用,该用户可以通知Fast DDS,以便这些接口也被用于通信。

15.11.1.1. 先决条件

此功能旨在用于Fast DDS自动设置监听单播定位符的情况。因此,metatrafficUnicastLocatorListmetatrafficMulticastLocatorList这两个列表必须为空。这些属性是在DomainParticipantQos中的wire_protocol()内置成员中设置的(请参阅DomainParticipantQos)。

注意:请注意DomainParticipantQos中设定的远程定位符集合限制(请参阅RemoteLocatorsAllocationAttributes)。建议使用同一域下所有系统发现的最高数量的本地地址。

15.11.1.2. 通知Fast DDS

一旦新的网络接口被启用,就必须手动通知Fast DDS。这是通过调用DomainParticipant::set_qos()来完成的。传递给该方法的DomainParticipantQoS可以更改其中一个可变DomainParticipant QoS,也可以简单地是当前DomainParticipant QoS(通过DomainParticipant::get_qos()获取)。

使用DomainParticipant::set_qos()就是上述先决条件存在原因:一旦启用了DomainParticipant,有几个QoS策略是不可变更且无法在运行时修改。其中定义了前面提到列表的WireProtocolConfigQos就是这些不可变政策之一。

以下是如何使用此功能的一段简要代码示例:

// 创建 DomainParticipant
DomainParticipant* participant =
        DomainParticipantFactory::get_instance()->create_participant(0, PARTICIPANT_QOS_DEFAULT);
if (nullptr == participant)
{
    // 错误处理
    return;
}

// 用户应用程序代码...

// 通知 Fast DDS 新网络接口已启用
participant->set_qos(PARTICIPANT_QOS_DEFAULT);

重要提示:此功能仍在开发中,仅对没有白名单限制的UDPv4传输正式支持。


内容由零声教学AI助手提供,问题来源于学员提问

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?