Reference:http://www.ibm.com/developerworks/cn/java/j-lo-apachethrift/
http://jacksongblack.blog.51cto.com/6378693/1175661
第一点
首先,说明一下windows环境下配置到运行的简单例子。
1. 官方下载thrift的exe文件;
2. 配置电脑的环境变量path,把thrift.exe所在的文件夹位置加入进去;
3. 如果配置成功,在cmd,命令thrift会有所提示。
到目前为止,电脑的环境配置完毕。
4. 在thrift文件所在的路径下执行thrift -r --gen rb hello.thrift。其中hello.thrift为项目的thrift文件。执行的结果就是:生成一个叫做gen-java的文件夹,里面就是你定义的接口。
此时,thrift文件转换完成。
第二点
Iface eg. implements Hello.Iface
Client eg. Hello.Client
Processor eg. Hello.Processor
1. 用户实现的业务逻辑
2. 根据thrift定义的服务接口描述文件生成的客户端和服务器端代码框架
3. 根据thrift文件生成代码实现数据的读写操作
4. Thrift的传输体系、协议以及底层I/O通信
第三点(详细讲解:使用Thrift可以很方便的定义一个服务并且选择不同的传输协议和传输层而不用重新生成代码)
1. 协议:Thrift可以让用户选择客户端和服务器端之间传输通信协议的类型,在传输协议上总体上划分为文本和二进制传输协议,为节约带宽,提高传输效率,一般情况下使用二进制类型的传输协议为多数,有时还会使用基于文本类型的协议,这需要根据项目/产品中的实际需求。常用的协议有以下几种:
TBinaryProtocol - 二进制编码格式进行数据传输
TCompactProtocol - 高效率的、密集的二进制编码格式进行数据传输
TCompactProtocol.Factory proFactory = new TCompactProtocol.Factory();(Server)
TCompactProtocol protocol = new TCompactProtocol(transport); (client)
TJSONProtocol -使用JSON的数据编码协议进行数据传输
TJSONProtocol =只提供JSON只写的协议,适用于通过脚本语言解析
2. 传输层:常用的传输层有以下几种
TSocket -使用阻塞式I/O进行传输,是最常见的模式
TFramedTransport - 使用非阻塞方式,按块的大小进行传输,类似于Java中NIO
TNonblocingTransport - 使用非阻塞方式,用于构建异步客户端
3. 服务器端类型
TSimpleServer - 单线程服务器端使用标准的阻塞式I/O
TThreadPoolExecutor - 多线程服务器端使用标准的阻塞式I/O
TNonblockingServer - 多线程服务器使用非阻塞式的I/O
4. 部署结构
HelloServiceClient->Hello.java(Hello.thrift, common libs: libthrift.jar, slf4j-api.jar)->HelloServiceServer.java(ServiceImplementation, helloServiceImpl.java)
客户端和服务器端部署时,需要用到公共的jar包和java文件