最近应用开发的过程中出现了一个小问题,顺便记录一下原因和方法--容器结构
本文译自:http://thrift.apache.org/docs/types/
Thrift类型系统目的是让编程人员尽可能的应用原生的类型,而不必关心它们所有工作的编程语言。本文的内容是基于Thrift白皮书,并且会替换其中的内容。Thrift IDL提供了用于生成每种目标语言代码的类型说明。
基本类型
被选定的基本类型是为了简略和清晰,而不是丰富和庞杂,它重要存眷所有编程语言中的关键类型。
1. bool:布尔类型(true或false)
2. byte:8位有符号整数
3. i16:16位有符号整数
4. i32:32位有符号整数
5. i64:64位有符号整数
6. double:64位浮点数
7. string:应用UTF-8编码的文本字符串
注意,上述类型中缺乏符号整数类型,这是由于在很多编程语言中没有原生的无符号整数类型。
特别类型
1. binary:未被编码的字节序列
2. N.B.:这是上述string类型的一种特别格式,添加这类类型是为提供更好的跟Java的互操作性。当前的筹划是在恰当时候把它提升到基本类型。
结构体
Thrift结构体定义了一个常用的对象,本质上等价与面向对象编程语言(OOP)中的类,但是它没有继承性。一个结构体是一个强类型字段的集合,每一个字段都有一个独一的命名标识符。字段可以有Thrift IDL中描述的各种注解(如数字字段ID,可选的默许值等)。
容器
Thrift容器是强类型的容器,它对应大多数编程语言中常用的容器类型。
Thrift中有三种容器类型:
list:按顺序排列的元素列表。它会转换成STL中的vector、Java中的ArrayList、脚本语言中的原生数组等;
set:无序的独一元素的集合。它会转换成STL中的set、Java中的HashSet、Pyhton中的set等。注意:PHP中不支撑set,因此它会被看做是一个与List相似的列表。
map:严厉的用独一的键来映射值。它会转换成STL中的map、Java中的HashMap,PHP中的联合数组、Python/Ruby中的dictionary等等。虽然Thrift会提供默许的类型映射,但是这些类型映射不是牢固的。被添加的定制的代码生成器指令允许应用目标语言中的定制类型来取代。
容器元素可所以任何有效的Thrift类型。
N.B.:为了最大化的兼容,它的键类型应当映射成基本类型,而不是结构体或容器类型。这是因为有些语言原生的map类型不支撑庞杂的键类型。另外,JSON协议也只支撑基本类型的键。
异常
为了能够任何给定语言的原生异常进行无缝的集成,除了它们会继承目标编程语言中基本的异常类之外,Thrift的异常基本上等同于结构。
服务
服务的定义要应用Thrift类型。它在语义上等同于面向对象编程语言中的接口(或纯虚拟抽象类)定义。Thrift编译器会生成具有完全功能的客户端和需要实现的服务端接口存根。
一个服务是由一组命名函数组成,包括函数名、参数列表、返回值。
注意,所有的被定义的Thrift类型都可以作为函数的返回类型,包括void。另外,可以给返回值是void的函数添加async修饰符,这样就会生成不等待响应的代码。注意,纯粹的void函数会把响应返回给客户端,这样来保障服务端的代码被执行实现。客户端调用带有async关键字的方法,只保障了该请求被成功的传输到了服务端。相同客户端的异步方法可以被服务端并行执行。
文章结束给大家分享下程序员的一些笑话语录:
乔布斯:怎么样还是咱安全吧!黑客:你的浏览器支持国内网银吗?苹果可以玩国内的网游吗乔布斯:......不可以黑客:那我研究你的漏洞干嘛,我也需要买奶粉!