原文出自【听云技术博客】:http://blog.tingyun.com/web/a...java
Thrift是什么?什么状况下使用thrift
Thrift源于大名鼎鼎的facebook之手,在2007年facebook提交Apache基金会将Thrift做为一个开源项目,对于当时的facebook来讲创造thrift是为了解决facebook系统中各系统间大数据量的传输通讯以及系统之间语言环境不一样须要跨平台的特性。因此thrift能够支持多种程序语言,例如: C++, C#, Cocoa, Erlang, Haskell, Java, Ocami, Perl, PHP, Python, Ruby, Smalltalk. 在多种不一样的语言之间通讯thrift能够做为二进制的高性能的通信中间件,支持数据(对象)序列化和多种类型的RPC服务。Thrift是IDL(interface definition language)描述性语言的一个具体实现,Thrift适用于程序对程序静态的数据交换,须要先肯定好他的数据结构,他是彻底静态化的,当数据结构发生变化时,必须从新编辑IDL文件,代码生成,再编译载入的流程,跟其余IDL工具相比较能够视为是Thrift的弱项,Thrift适用于搭建大型数据交换及存储的通用工具,对于大型系统中的子系统间数据传输相对于JSON和xml不管在性能、传输大小上有明显的优点。web
Thrift 基础架构
Thrift是一个服务端和客户端的架构体系,就是socket传输,Thrift 具备本身内部定义的传输协议规范(TProtocol)和传输数据标准(TTransports),经过IDL脚本对传输数据的数据结构(struct) 和传输数据的业务逻辑(service)根据不一样的运行环境快速的构建相应的代码,而且经过本身内部的序列化机制对传输的数据进行简化和压缩提升高并发、 大型系统中数据交互的成本,下图描绘了Thrift的总体架构,分为6个部分:1.你的业务逻辑实现(You Code) 2.客户端和服务端对应的Service 3.执行读写操做的计算结果4.TProtocol 5.TTransports 6.底层I/O通讯apache
Thrift脚本的数据类型服务器
Base Types:基本类型数据结构
bool Boolean, one byte多线程
byte Signed byte架构
i16 Signed 16-bit integer并发
i32 Signed 32-bit integersocket
i64 Signed 64-bit integer高并发
double 64-bit floating point value
string String
binary Blob (byte array)
Struct:结构体类型
Container:容器类型,即List、Set、Map
map<t1,t2> Map from one type to another
list<t1> Ordered list of one type
set<t1> Set of unique elements of one type
Exception:异常类型
Service: 定义对象的接口,和一系列方法
协议
Thrift可让你选择客户端与服务端之间传输通讯协议的类别,在传输协议上整体上划分为文本(text)和二进制(binary)传输协议, 为节约带宽,提供传输效率,通常状况下使用二进制类型的传输协议为多数,但有时会仍是会使用基于文本类型的协议,这须要根据项目/产品中的实际需求:
TBinaryProtocol – 二进制编码格式进行数据传输。
TCompactProtocol – 这种协议很是有效的,使用Variable-Length Quantity (VLQ) 编码对数据进行压缩。
TJSONProtocol – 使用JSON的数据编码协议进行数据传输。
TSimpleJSONProtocol – 这种节约只提供JSON只写的协议,适用于经过脚本语言解析
TDebugProtocol – 在开发的过程当中帮助开发人员调试用的,以文本的形式展示方便阅读。
传输层
TSocket- 使用堵塞式I/O进行传输,也是最多见的模式。
TFramedTransport- 使用非阻塞方式,按块的大小,进行传输,相似于Java中的NIO。
TFileTransport- 顾名思义按照文件的方式进程传输,虽然这种方式不提供Java的实现,可是实现起来很是简单。
TMemoryTransport- 使用内存I/O,就比如Java中的ByteArrayOutputStream实现。
TZlibTransport- 使用执行zlib压缩,不提供Java的实现。
服务端类型
TSimpleServer - 单线程服务器端使用标准的堵塞式I/O。
TThreadPoolServer - 多线程服务器端使用标准的堵塞式I/O。
TNonblockingServer – 多线程服务器端使用非堵塞式I/O,而且实现了Java中的NIO通道。
Thrift构建步骤总结(参考实例1)
1 、下载thrift.exe
到thrift官网下载,这里我用的是0.9.3版本
二、将exe放到C:Windows下(重命名为thrift.exe)
三、C:Windows建立.thrift文件,编写ThriftServer.thrift代码
四、在目录下执行thrift.exe -r -gen java ./ThriftServer.thrift;执行成功后看到在该目录下生成了gen-java文件夹,在该文件夹中生成了IThriftServer.java;
五、将IThriftServer.java拷贝到server端,进行后续编写便可。
六、若是client和server端是跨应用,那么须要server端先编译打包成jar,将这个jar添加到client端的依赖中。