3.1.2.2.14. WireProtocolConfigQos
此QoS策略允许配置线协议的相关参数。
QoS政策数据成员列表:
数据成员名称 | 类型 | 默认值 |
---|---|---|
prefix | GuidPrefix_t | 0 |
participant_id | int32_t | -1 |
builtin | BuiltinAttributes | - |
port | PortParameters | - |
default_unicast_locator_list | LocatorList | 空列表 |
default_multicast_locator_list | LocatorList | 空列表 |
default_external_unicast_locators | ExternalLocators | 空 |
ignore_non_matching_locators | bool | false |
数据成员说明:
- prefix: 允许用户手动设置GUID前缀。
- participant_id: 设置参与者标识符。默认情况下由域自动生成。
- builtin: 该数据成员允许配置内置参数。
- port: 该数据成员允许配置与RTPS协议相关的端口参数(众所周知的端口)。
- default_unicast_locator_list: 指定在未定义单播定位符的情况下,任何在RTPSParticipant内定义的端点所使用的默认单播定位符列表。该列表应至少包含一个定位符。
- default_multicast_locator_list: 存储用于在未定义多播定位符时,任何在RTPSParticipant内定义的端点所使用的默认多播定位符列表。通常留空。
- default_external_unicast_locators: 定义在未定义单播定位符时,用于参与者内部任何端点的外部定位符。
- ignore_non_matching_locators: 定义是否忽略从其他DDS参与者收到的不匹配其宣布的任何定位符。
注意事项
- 此QoS策略适用于DomainParticipant实体。
重要提示
- 在启用实体中唯一可变字段是m_DiscoveryServers,它包含在builtin中的discovery_config内(请参见运行时修改远程服务器列表)。
示例代码
以下示例仅适用于DomainParticipant实体:
// 创建DomainParticipantQos对象
DomainParticipantQos participant_qos;
// 设置GUID前缀
std::istringstream("72.61.73.70.66.61.72.6d.74.65.73.74") >> participant_qos.wire_protocol().prefix;
// 手动设置participantId
participant_qos.wire_protocol().participant_id = 11;
// 配置内置属性
participant_qos.wire_protocol().builtin.discovery_config.discoveryProtocol =
eprosima::fastdds::rtps::DiscoveryProtocol::SERVER;
// 添加单播位置到单播列表
eprosima::fastdds::rtps::Locator_t server_locator;
eprosima::fastdds::rtps::IPLocator::setIPv4(server_locator, "192.168.10.57");
server_locator.port = 56542;
participant_qos.wire_protocol().builtin.metatrafficUnicastLocatorList.push_back(server_locator);
// 添加具有外部IP和其他参数的元流量外部位置
eprosima::fastdds::rtps::LocatorWithMask meta_external_locator;
meta_external_locator.kind = LOCATOR_KIND_UDPv4;
meta_external_locator.port = 34567;
meta_external_locator.mask(24);
participant_qos.wire_protocol().builtin.metatraffic_external_unicast_locators[1][0].push_back(
meta_external_locator);
// 向默认单播位置列表添加位置
eprosima::fastdds::rtps::Locator_t unicast_locator;
eprosima::fastdds::rtps::IPLocator::setIPv4(unicast_locator, 192, 168, 1, 41);
unicast_locator.port = 7400;
participant_qos.wire_protocol().default_unicast_locator_list.push_back(unicast_locator);
// 向默认多播位置列表添加位置
eprosima::fastdds::rtps::Locator_t multicast_locator;
eprosima::fastdds::rtps::IPLocator::setIPv4(multicast_locator, 192, 168, 1, 41);
multicast_locator.port = 7400;
participant_qos.wire_protocol().default_multicast_locator_list.push_back(multicast_locator);
// 添加具有外部IP和其他参数的默认外部位置
eprosima::fastdds::rtps::LocatorWithMask external_locator;
external_locator.kind = LOCATOR_KIND_UDPv4;
external_selector.port = 23456;
external_selector.mask(24);
participant_qos.wire_protocol().default_external_unicast_locators[1][0].push_back(external_selector);
// 丢弃不匹配的位置
participant_qos.wire_protocol().ignore_non_matching_locators = true;
// 增加变更尝试次数
participant_qos.wire_protocol().builtin.mutation_tries = 300u;
// 使用修改后的QoS创建DomainParticipant实体
participant_ = factory_->create_participant(domain, participant_qos);
注意
有关扩展XML信息,请参考DomainParticipant配置和Builtin参数XML部分。
内容由零声教学AI助手提供,问题来源于学员提问