Thrift 类型系统旨在允许程序员尽可能多地使用原生类型,无论他们使用哪种编程语言。此信息基于并取代 Thrift 白皮书中的信息。 Thrift IDL 提供了用于为每种目标语言生成代码的类型的描述。
基本类型
选择基本类型的目的是简单明了而不是丰富,重点关注所有编程语言中可用的关键类型。
- bool:布尔值(真或假)
- byte:一个 8 位有符号整数
- i16:一个 16 位有符号整数
- i32:一个 32 位有符号整数
- i64:一个 64 位有符号整数
- double:一个 64 位浮点数
- string:使用 UTF-8 编码编码的文本字符串
请注意没有无符号整数类型。 这是因为在许多编程语言中没有原生无符号整数类型。
特殊类型
二进制:未编码的字节序列
这是目前上述字符串类型的一种特殊形式,添加它以提供与 Java 更好的互操作性。
结构
Thrift 结构定义了一个通用对象——它们本质上等同于 OOP 语言中的类,但没有继承。 结构有一组强类型字段,每个字段都有一个唯一的名称标识符。 字段可能具有 Thrift IDL 中描述的各种注释(数字字段 ID、可选默认值等)。
容器
Thrift 容器是强类型容器,映射到大多数编程语言中常用和常用的容器类型。
共有三种容器类型:
- list:元素的有序列表。 转换为 STL 向量、Java ArrayList、脚本语言中的本机数组等。
- set:一组无序的唯一元素。 转换为 STL 集合、Java HashSet、Python 中的集合等。注意:PHP 不支持集合,因此将其视为类似于 List
- map<type1,type2>:值的严格唯一键映射。 转换为 STL 映射、Java HashMap、PHP 关联数组、Python/Ruby 字典等。虽然提供了默认值,但类型映射并未明确固定。 添加了自定义代码生成器指令,以允许在各种目标语言中替换自定义类型。
容器元素可以是任何有效的 Thrift 类型。
注意:为了获得最大的兼容性,map 的键类型应该是基本类型,而不是结构或容器类型。 有一些语言在其原生映射类型中不支持更复杂的键类型。 此外,JSON 协议仅支持作为基本类型的键类型。
异常
异常在功能上等同于结构,除了它们在每种目标编程语言中适当地从本机异常基类继承,以便与任何给定语言的本机异常处理无缝集成。
服务
服务是使用 Thrift 类型定义的。 服务的定义在语义上等同于在面向对象编程中定义接口(或纯虚拟抽象类)。 Thrift 编译器生成实现接口的功能齐全的客户端和服务器存根。
服务由一组命名函数组成,每个函数都有一个参数列表和一个返回类型。
请注意,除了所有其他已定义的 Thrift 类型之外,void 是函数返回的有效类型。 此外,可以将 oneway 修饰符关键字添加到 void 函数,这将生成不等待响应的代码。 请注意,纯 void 函数将向客户端返回响应,以保证操作已在服务器端完成。 使用单向方法调用,客户端只能保证请求在传输层成功。 同一客户端的单向方法调用可以由服务器并行/乱序执行。
本文为从大数据到人工智能博主「xiaozhch5」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://lrting.top/backend/4146/
[…] 而对于thrift中所使用的基本类型,您可以参考文章:Thrift数据类型 […]