Thrift 学习笔记

378 阅读1分钟

绪言

Thrift是一套完整的RPC框架,包括代码生成、序列化以及RPC通信三大部分。具象地说,代码生成规定了我们该如何使用Thrift,序列化机制决定着数据以怎样的形式在网络中传输,RPC通信框架是Thrift实现服务部署以及发现的方式。

1. IDL语法与代码生成

IDL(interface definition language)是Thrift规定的文件语法,解析器可以讲满足IDL语法的.thrift文件解析成我们能使用的RPC脚手架。

1.1 数据类型

  • bool true|false
  • byte 8bit 字节类型
  • i16 i32 i64 整数
  • double 64bit浮点数
  • 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不是该数字的一部分)对于小数省空间,大数会花费更大的空间。