thrift
thrift是一套远程调用框架,最初是由Facebook开发的,并在2008年捐给了Apache基金会,成为了一个孵化器项目。thrift支持可扩展且跨语言的服务的开发,它结合了功能强大的软件堆栈和代码生成引擎,支持的客户端语言包括C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 。
Thrift的设计提供了以下这些特性:
1、语言无关的类型
因为类型是使用定义文件按照语言中立的方式规定的,所以它们可以被不同的语言分析。比如,C++的结构可以和Python的字典类型相互交换数据。
2、通用传输接口
不论你使用的是磁盘文件、内存数据还是socket流,都可以使用同一段应用代码。
3、协议无关
Thrift会对数据类型进行编码和解码,可以跨协议使用。
4、支持版本
数据类型可以加入版本信息,来支持客户端API的更新。
安装
封装了数据的序列化和反序列化
安装
定义命名空间
namespace [go/java/py/php] rpc
定义 service 和方法
数据类型
数据类型
java中定义一个接口需要传入参数,方法名,返回值和抛异常操作,这其中比较关键的是参数。thrift自己内部有一套与语言无关的类型,可以与java中的类型进行对应,将java中的类型换成thrift对应的类型就能够将java接口定义转换成thrift接口定义。
类型 | 解释 | java对应类型 | C++对应类型 |
---|---|---|---|
bool | 布尔值,true 或 false | boolean | bool |
byte | 8 位有符号整数 | byte | int |
i16 | 16 位有符号整数 | short | int |
i32 | 32 位有符号整数 | int | int |
i64 | 64 位有符号整数 | long | long |
double | 64 位浮点数 | double | double |
string | utf-8编码的字符串 | String | string |
list |
元素类型为t的有序表,容许元素重复 | ArrayList | vector |
set |
元素类型为t的无序表,不容许元素重复 | HashSet | set |
map |
键类型为t,值类型为t的kv对,键不容许重复 | HashMap | map |
struct | 一组对象 | class | struct |
exception | 异常 | Exception | Exception |
service | 服务类型 | interface | 抽象类 |
enum | 枚举 | enum | enum |
struct Obj {
1: i32 num1 = 0, //默认值
2: i32 num2,
3: Operation op, //可以嵌套其他类型
4: optional string comment, //可选字段
5: list<i32> l //list
6: map<i32,string> m //map
7: set<string> s //set
}
// 枚举
enum Operation {
ADD = 1,
SUBTRACT = 2,
MULTIPLY = 3,
DIVIDE = 4
}
参考文章:
作者:扎Zn了老Fe 链接:https://www.jianshu.com/p/f431bb907072