Thrift简介及使用

2017-11-05  本文已影响0人  第七感_12d9

一、简介

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数据传输方式)

二、使用

上一篇下一篇

猜你喜欢

热点阅读