RPC框架Thrif数据类型

Thrift类型系统允许程序员尽可能使用本机类型,无论它们使用什么编程语言。此信息基于并取代位于Thrift白皮书中的信息。 Thrift IDL为每个目标语言生成代码的类型提供了描述。

一、基本数据类型

选择基本数据类型是为了简单和清晰,关注所有编程语言中都有的关键类型

·        bool: 布尔型(true or false)

·        byte: 字节,8位符号整型

·        i16: 16位符号整型

·        i32: 32位符号整型

·        i64: 64位符号整型

·        double: 64位浮点数

·        string: UTF-8编码的字符串

备注:这里没有无符号整型,那是因为在许多编程语言中没有无符号整型。


二、特殊类型

binary: 没有编码的字节序列

备注:这是字符串类型的特殊形式,增加这个类型是为了同java更好的互操作。目前的计划是在某种程度上将其提升为基础类型。


三、结构Structs

Thrift中的Structs定义了通用的对象,它基本上等同于OOP语言中的类,但是没有继承功能。一个struct有一组强类型的字段,每一个字段由唯一的名字标识。字段可以有各种注释,如数字字段IDs、可选默认值等,这些在Thrift IDL里面有描述。


四、容易Containers

Thrift的容器是强类型的容器,映射成各种编程语言中的可用容器。

有三种容器类型:

·        list: 元素的有序列表,转换为STL的vector,Java的ArrayList,脚本语言的本地舒展等等。

·        set: 唯一元素的无序列表。转换成STL的set,Java的HashSet,Python的set,等等。PHP不支持set,因此会被转换为相似的List。

·        map: 唯一键、值匹配。转换为STL的map,Java的HashMap,PHP的associative array,Python的Dictionary,等等。虽然提供了默认值,但是类型映射没有被明确的修改,添加了自定义代码生成指令,允许替换目标成目标语言中的自定义类型。

容器的类型可以是任何合法的Thrift类型。

备注:为了最大限度的兼容,map的键类型应该为基本数据类型,而不应该是struct或container类型。有些语言不支持复杂的键类型。另外,JSON协议只支持键类型为基本数据类型。


五、异常Exceptions

异常在功能上等同于Structs,除了它们从本地异常基类继承外,以便与任何语言的本地异常平滑的集成。


六、服务Services

服务使用Thrift的类型定义,服务的定义在语义上等同于面向对象语言的接口定义(或纯虚类的定义)。Thrift编译器生成实现了接口的完全功能的客户端和服务器庄。

一个服务是一组命名函数的集合,每一个函数有参数列表和返回值。

备注:除了其他定义的Thrift类型外,void作为函数返回值是合法的。另外,oneway修饰符必须添加到void函数,这样生成的代码就不会等待返回。注意,纯void函数将返回一个回应给客户端以表面服务器上的操作已经完成。有oneway修饰符的方法,只能表明请求在传输层上成功传输,oneway方法在服务端可能同时执行,且执行的顺序也可能不一样。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值