DDS(Data Distribution Service)————Publisher(8) DataWriterQos的RTPSEndpointQos与UserDataQosPolicy详解
5.3.2.11 RTPSEndpointQos
RTPSEndpointQos
是指在 RTPS (Real-Time Publish-Subscribe) 协议中使用的 QoS (Quality of Service) 策略,控制 RTPS 端点的特性和行为。RTPS 是 DDS (Data Distribution Service) 的底层传输协议,负责数据传输的发现和管理。RTPSEndpointQos
包括一些与传输和通信相关的 QoS 策略,用于定义如何在网络上传输数据。
主要属性
- unicast_locator_list
- 描述: 定义端点的单播地址列表,用于指定发送和接收数据的网络接口。
- 用法: 用于配置端点的单播通信,通常在单播传输环境下使用。
- multicast_locator_list
- 描述: 定义端点的多播地址列表,用于在多播组中发送和接收数据。
- 用法: 用于配置端点的多播通信,通常在多播传输环境下使用。
- remote_locator_list
- 描述: 指定远程端点的地址列表,用于定义可以与该端点通信的远程端点。
- 用法: 用于配置与特定远程端点的通信,通常在需要与特定远程地址通信时使用。
- user_defined_id
- 描述: 用于描述不同的StaticEndpointDiscovery。
- 用法: 这个ID对于不同的StaticEndpointDiscovery是唯一的。
- entity_id
- 描述:用于标识特定的 RTPS 端点 。
- 用法: 用于区分端点。
- history_memory_policy
- 描述: 用于定义如何管理和分配内存资源。它主要用于优化内存使用和控制内存分配的行为,从而提高系统的性能和稳定性,包括:
PREALLOCATED_MEMORY_MODE
: 对于每个数据类型分配最大的内存,所以分配计数是最小的。PREALLOCATED_WITH_REALLOC_MEMORY_MODE
:为每个数据分配默认的内存,当一个较大的数据来到时,需要重新分配,因此比第一种方法减少了内存的消耗,但会增加一定的分配计数。DYNAMIC_RESERVE_MEMORY_MODE
:当有数据到来时会动态的分配内存,因此这将会使用最小的内存,相反的会拥有最多的分配计数。DYNAMIC_REUSABLE_MEMORY_MODE
:分配方法与DYNAMIC_RESERVE_MEMORY_MODE
方法类似,有所区别的是对于未来的数据可以重用以前的空间。
- 用法: 管理数据的内存分配。
- 描述: 用于定义如何管理和分配内存资源。它主要用于优化内存使用和控制内存分配的行为,从而提高系统的性能和稳定性,包括:
C + + 示例 {\color{green}C++示例} C++示例
RTPSEndpointQos endPointQos;
endPointQos.entity_id = 3;
endPointQos.user_defined_id = 4;
Locator_t uncast_IP ;
IPLocator::setIPv4(uncast_IP,"127.0.0.1");
uncast_IP.port = 13400;
Locator_t mulcast_Ip;
IPLocator::setIPv4(mulcast_Ip,"123.32.32.12");
mulcast_Ip.port = 7500;
endPointQos.unicast_locator_list.push_back(uncast_IP);
endPointQos.multicast_locator_list.push_back(mulcast_Ip);
/*
typedef enum MemoryManagementPolicy{
PREALLOCATED_MEMORY_MODE,
PREALLOCATED_WITH_REALLOC_MEMORY_MODE,
DYNAMIC_RESERVE_MEMORY_MODE,
DYNAMIC_REUSABLE_MEMORY_MODE
}MemoryManagementPolicy_t;
*/
endPointQos.history_memory_policy = RTPS::DYNAMIC_RESERVE_MEMORY_MODE;
dataWriterQos.endpoint(endPointQos);
X M L 示例 {\color{green}XML示例} XML示例
<data_writer profile_name="writer_xml_conf_unicast_locators_profile">
<userDefinedID>3</userDefinedID>
<entityID>2</entityID> <!-- Int16 -->
<unicastLocatorList>
<locator>
<udpv4>
<port>7800</port>
</udpv4>
</locator>
</unicastLocatorList>
<multicastLocatorList>
<locator>
<udpv4>
<address>239.255.0.4</address>
<port>7900</port>
</udpv4>
</locator>
</multicastLocatorList>
<!-- The history memory policy is changed to DYNAMIC_RESERVE -->
<historyMemoryPolicy>DYNAMIC</historyMemoryPolicy>
</data_writer>
<data_reader profile_name="reader_xml_conf_unicast_locators_profile">
<userDefinedID>5</userDefinedID>
<entityID>4</entityID> <!-- Int16 -->
<unicastLocatorList>
<locator>
<udpv4>
<port>7800</port>
</udpv4>
</locator>
</unicastLocatorList>
<multicastLocatorList>
<locator>
<udpv4>
<address>239.255.0.4</address>
<port>7900</port>
</udpv4>
</locator>
</multicastLocatorList>
<historyMemoryPolicy>PREALLOCATED_WITH_REALLOC</historyMemoryPolicy>
</data_reader>
5.3.2.12 UserDataQosPolicy
UserDataQosPolicy
是 DDS(Data Distribution Service)中的一种 QoS(Quality of Service)策略,用于为 DomainParticipant、Publisher、Subscriber、DataWriter 或 DataReader 提供用户自定义的数据。这些数据可以用来在 DDS 实体之间传递应用程序特定的信息。
N o t e s : 此策略会影响所有 D D S 实体,并且可以再已经开启的 D D S 上使用 {\color{red}Notes:此策略会影响所有DDS实体,并且可以再已经开启的DDS上使用} Notes:此策略会影响所有DDS实体,并且可以再已经开启的DDS上使用
主要属性
-
collection
- 描述:可以将信息附加到实体对象中,collection的数据类型为
vector<uint8_t>
- 作用:用于实体之间的数据传递或者身份认证。
- 描述:可以将信息附加到实体对象中,collection的数据类型为
C + + 示例 {\color{green}C++示例} C++示例
UserDataQosPolicy userDataPolicy;
std::vector<eprosima::fastrtps::rtps::octet> vec;
vec = userDataPolicy.data_vec();
eprosima::fastrtps::rtps::octet val = 10;
vec.push_back(val);
val = 20;
vec.push_back(val);
userDataPolicy.data_vec(vec);
dataWriterQos.user_data(userDataPolicy);
X M L 示例 {\color{green}XML示例} XML示例
<participant profile_name="participant_xml_conf_userdata_profile">
<rtps>
<userData>
<value>3.a</value>
</userData>
</rtps>
</participant>
<data_writer profile_name="writer_xml_conf_userdata_profile">
<qos>
<userData>
<value>3.a</value>
</userData>
</qos>
</data_writer>
<data_reader profile_name="reader_xml_conf_userdata_profile">
<qos>
<userData>
<value>3.a</value>
</userData>
</qos>
</data_reader>