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的更新。

安装

封装了数据的序列化和反序列化

安装
image.png

定义命名空间
namespace [go/java/py/php] rpc
定义 service 和方法
image.png

数据类型

数据类型

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
  1. struct Obj {
  2. 1: i32 num1 = 0, //默认值
  3. 2: i32 num2,
  4. 3: Operation op, //可以嵌套其他类型
  5. 4: optional string comment, //可选字段
  6. 5: list<i32> l //list
  7. 6: map<i32,string> m //map
  8. 7: set<string> s //set
  9. }
  10. // 枚举
  11. enum Operation {
  12. ADD = 1,
  13. SUBTRACT = 2,
  14. MULTIPLY = 3,
  15. DIVIDE = 4
  16. }

参考文章:
作者:扎Zn了老Fe 链接:https://www.jianshu.com/p/f431bb907072