这段文本介绍了DDS-XTypes规范中有关远程数据类型发现(Remote Data Types Discovery)的机制,具体内容如下:
14.1 远程数据类型发现
概述
DDS-XTypes规范定义了一种内部机制,可以在运行时发现远程数据类型,并根据通过 TypeConsistencyEnforcementQosPolicy
配置的可扩展类型兼容性规则进行匹配。需要注意的是,目前eProsima Fast DDS尚不支持XTypes兼容性检查。
数据传输优化
远程数据类型发现机制基于交换经过优化的数据类型信息,以减少所需带宽。具体来说,以下是一些重要结构的定义,用于通信主题数据类型及其依赖关系:
- TypeIdentfierWithSize:包含数据类型标识符和序列化大小。
@extensibility(APPENDABLE) @nested
struct TypeIdentfierWithSize {
TypeIdentifier type_id;
unsigned long typeobject_serialized_size;
};
- TypeIdentifierWithDependencies:描述了一个数据类型及其依赖项的数量。
@extensibility(APPENDABLE) @nested
struct TypeIdentifierWithDependencies {
TypeIdentfierWithSize typeid_with_size;
long dependent_type_id_count;
sequence<TypeIdentfierWithSize> dependent_typeids;
};
TypeInformation:包含最小和完整的数据类型信息。这些信息用于唯一地标识某个数据类型。
@extensibility(MUTABLE) @nested struct TypeInformation { @id(0x1001) TypeIdentifierWithDependencies minimal; @id(0x1002) TypeIdentifierWithDependencies complete; };
数据对象表示
- TypeObject:用来包含不同版本的数据对象,可能为完整或最小格式。
@extensibility(APPENDABLE) @nested
union TypeObject switch(octet) {
case EK_COMPLETE:
CompleteTypeObject complete;
case EK_MINIMAL:
MinimalTypeObject minimal;
};
CompleteTypeObject
包含完整的数据描述,而MinimalTypeObject
则只包括检查兼容性所需的最少信息。
注意事项
当前实现的TypeObject表示不支持使用 @external
注释定义的前向声明或递归数据类型。在使用Fast DDS-Gen生成代码时,如果想禁用TypeObject生成,可以使用 -no-typeobjectsupport
选项。
14.1.1 前提条件
要使远程数据类型发现功能正常工作,需要满足以下条件:
本地数据类型必须注册到ITypeObjectRegistry。当调用
register_type()
时,如果相应的注册代码已通过eProsima Fast DDS-Gen生成,这些类型会自动注册。- 如果使用了
-no-typeobjectsupport
选项,则会禁用这些文件的生成,从而有效禁用远程类型发现。
- 如果使用了
在域参与者(DomainParticipant)的端点发现信息中必须接收
TypeInformation
。未通知其TypeInformation
的域参与者将不会触发远程数据类发现机制。如果未满足以上前提条件,则端点匹配仅依赖于数据名称和主题名称来匹配被发现的端点。
14.1.2 配置
本地数据传播级别可以按照“ 类型传播”的规定进行配置。
14.1.3 示例
有关如何利用此功能的信息,请参考“远程类发现和端点匹配”部分,以获取更详细的信息和示例。
总结
这段文字全面介绍了DDS-XTypes规范中的远程数据类发现场景,包括相关结构、要求以及潜在限制。它提供了一种高效的方法来处理分布式系统中的多样化和变化多端的数据模型,从而增强系统间的数据互操作性。
内容由零声教学AI助手提供,问题来源于学员提问