Thrift简介及使用
一、简介
1.Thrift是一种典型的CS(客户端/服务端)结构,客户端与服务端可以使用不同的语言开发。既然客户端和服务端能使用不同的语言开发,那么一定就要有一种之间语言来管理客户端和服务端的语言,这种语言就是IDL(Interface Description Language).
2.Thrift不支持无符号类型,因为很多语言不存在无符号类型,比如Java
3.集合中的元素可以是除了service之外的任何类型,包括exception
thrift容器类型:
(1)list:一系列由T类型的数据组成的有序列表,元素可以重复
(2)set:一系列由T类型的数据组成的无序列表,元素不可重复
(3)map:一个字典结构,key为K类型,value为V类型,相当于Java中的HashMap
4.thrift定义服务相当于Java中创建Interface一样,关键字service
typedef定义别名
const定义常量
namespace相当于Java的package,namespace 语言 路径
include引入包
#和//开头为注释,/**/包裹的也是注释
required必选,optional可选
5.thrift传输协议
(1)TBinaryProtocal:二进制格式
(2)TCompactProtocal:压缩格式,比TBinaryProtocal效率更高
(3)TJSONProtocal:JSON格式
(4)TSimpleJSONProtocal:提供JSON只写协议,生成的文件很容易通过脚本语言解析,极少使用,缺少元数据
(5)TDebugProtocal:使用易懂的可读的文本格式,以便于debug
6.thrift传输方式
(1)TSocket:阻塞式socket,效率低,使用少
(2)TFramedTransport:以frame为单位进行压缩,非阻塞式服务中使用
(3)TFileTransport:以文件形式进行传输
(4)TMemoryTransport:将内存用于I/O,java实现时内部实际使用了简单的ByteArrayOutputStream
(5)TZlibTransport:使用zlib进行压缩,与其他传输方式联合使用,当前无java实现
7.thrift支持的服务模型:
(1)TSimpleServer:简单的单线程服务模型,常用于测试
(2)TThreadPoolServer:多线程服务模型,使用标准的阻塞式IO,来一个请求起一个线程
(3)TNonblockingServer:多线程服务模型,使用非阻塞式IO(需使用TFramedTransport数据传输方式)
(4)THsHaServer:继承自TNonblockingServer,THsHa引入了线程池去处理,其模型把读写任务放到线程池去处理;Half-sync/Half-async的处理模式,Half-async是在处理IO事件上(accept/read/write IO),Half-sync用于handler对rpc的同步处理(需使用TFramedTransport数据传输方式)