Thrift数据类型

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 函数将向客户端返回响应,以保证操作已在服务器端完成。 使用单向方法调用,客户端只能保证请求在传输层成功。 同一客户端的单向方法调用可以由服务器并行/乱序执行。

5 1 投票
文章评分

本文为从大数据到人工智能博主「xiaozhch5」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://lrting.top/backend/4146/

(0)
上一篇 2022-03-22 00:22
下一篇 2022-03-22 11:02

相关推荐

订阅评论
提醒
guest

1 评论
最旧
最新 最多投票
内联反馈
查看所有评论
trackback
2 年 前

[…] 而对于thrift中所使用的基本类型,您可以参考文章:Thrift数据类型 […]

1
0
希望看到您的想法,请您发表评论x