基本概念
轻量级、跨语言的RPC框架
功能特点:
- 基于IDL(接口描述语言)生成跨语言的RPC clients and servers,支持超过20种语言
- 支持二进制的高性能的编解码框架
- 支持NIO的底层通信
- 相对简单的服务调用模型
Thrift架构
在介绍Thrift架构前,先了解下一般RPC框架的组成结构
RPC组成结构
包括服务器端发布和调用处理组件,网络IO组件,协议编解码组件,客户端调用组件,客户端代理组件等等
Thrift架构
各部分解释可看图中英文,释义补充:
1、用户自定义类型序列化方式将在通过IDL生成的代码中实现,实际也是根据struct中的各个field调用TProtocol的基础类型序列化实现
2、RPC stub中已经提供了Service Client,其作用是构造Thrift调用参数,发起调用,解析结果;而白色部分需用户自己写的Client是实例化TProtocol、TTransport组件,设置业务参数,通过调用Service Client发起请求
Thrift组件
TProtocol 协议和编解码组件
TTransport IO传输组件
TProcessor 服务调用处理组件
TServer,服务器网络IO
IDL 服务描述组件,负责生产跨平台客户端
IDL 服务描述语言
IDL语法
namespace 定义包名
struct 定义服务接口的参数,返回值使用到的类结构。如果接口的参数都是基本类型,则不需要定义struct
service 定义接口
支持的数据类型
bool 布尔型
byte 8位整数
i16 16位整数
i32 32位整数
i64 64位整数
double 双精度浮点数
string 字符串
binary 字节数组
list<i16> List集合,必须指明泛型
map<string, string> Map类型,必须指明泛型
set<i32> Set集合,必须指明泛型
生成的类包括5部分
接口类型,默认名称都是Iface。这个接口类型被服务器和客户端共同使用。服务器端使用它来做顶层接口,编写实现类。客户端代码使用它作为生成代理的服务接口。会自动生成同步调用和异步调用的两个接口。
客户端类型,一个同步调用的客户端Client,一个异步调用的客户端AsyncClient
Processor,用来支持方法调用,每个服务的实现类都要使用Processor来注册,这样最后服务器端调用接口实现时能定位到具体的实现类。
方法参数的封装类,以"方法名_args"命名
方法返回值的封装类,以"方法名_result"命名
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。