绪言
Thrift是一套完整的RPC框架,包括代码生成、序列化以及RPC通信三大部分。具象地说,代码生成规定了我们该如何使用Thrift,序列化机制决定着数据以怎样的形式在网络中传输,RPC通信框架是Thrift实现服务部署以及发现的方式。
1. IDL语法与代码生成
IDL(interface definition language)是Thrift规定的文件语法,解析器可以讲满足IDL语法的.thrift文件解析成我们能使用的RPC脚手架。
1.1 数据类型
booltrue|falsebyte8bit 字节类型i16 i32 i64整数double64bit浮点数string编码未知的文本或二进制串struct结构体enum枚举const常量typedef类型定义exception异常(定义类似结构体)service服务(接口或者虚拟类) struct
struct Example {
1: optional i32 id; // optional修饰的变量没有赋值则不会被序列化
2: required bool flg = true; // required修饰的变量必须赋值
3: string scrip;// 缺醒的变量会赋值为默认值
}
1.2 容器
list<t>set<t>map<t1, t2>
1.3 包管理
- 其他包引用
#include - 命名空间
namespace language P.S.M
1.4 代码生成
thrift -r --gen xxx.thrift,每一个struct,service都会单独生成一个类。
2. 序列化机制
-
Thrift序列化采取TLV编码实现(Tag+Length+Value组成结构体,对于简单数据结构TV,复合数据结构》TLV)。
-
Binary与Compact区别:Compact对整形数据进行压缩,对于不定长的整形,只使用7位,最高的1位做标志位(1表示下一个byte也是该数字的一部分,0表示下一个byte不是该数字的一部分)对于小数省空间,大数会花费更大的空间。