只要注册ofo就送你10块钱,还等什么,快来注册吧
一、概述
Apache Thrift是Facebook实现的一种高效的、支持多种编程语言的远程服务调用的框架。Thrift是由Facebook开发的,并在2008年捐给了Apache基金会,成为了一个孵化器项目。
Thrift是一个软件框架,用来进行可扩展且跨语言的服务开发。它结合了功能强大的软件堆栈和代码生成引擎,
Thrift是一个驱动层接口,它提供了用于客户端使用多种语言实现的API。
Thrift是个代码生成库,支持的客户端语言包括C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 。它的目标是为了各种流行的语言提供便利的RPC调用机制,而不需要使用那些开销巨大的方式,比如SOAP。
要使用Thrift,就要使用一个语言中立的服务定义文件,描述数据类型和服务接口。这个文件会被用作引擎的输入,编译器为每种支持的语言生成代码。这种静态生成的设计让它非常容易被开发者所使用,而且因为类型验证都发生在编译期而非运行期,所以代码可以很有效率地运行。
Thrift的设计提供了以下这些特性:
1、语言无关的类型
因为类型是使用定义文件按照语言中立的方式规定的,所以它们可以被不同的语言分享。比如,C++的结构可以和Python的字典类型相互交换数据。
2、通用传输接口
不论你使用的是磁盘文件、内存数据还是socket流,都可以使用同一段应用代码。
3、协议无关
Thrift会对数据类型进行编码和解码,可以跨协议使用。
4、支持版本
数据类型可以加入版本信息,来支持客户端API的更新。
二、下载配置
1)安装thrift:到thrift官网下载exe文件,然后将文件重命名为thrift.exe
,拷贝到D:\EBOOK\thrift
目录下(或者任何目录下),然后就可以在dos环境下使用了
|
|
输出的java文件默认输出到当前目录下D:\EBOOK\thrift\gen-java
,也可以使用-o
参数指定输出路径;
2)下载相关依赖包
2.1)libthrift.jar
,下载地址:http://repo1.maven.org/maven2/org/apache/thrift/libthrift/0.9.0/
2.2)slf4j-api.jar
2.3)slf4j-simple.jar
到官网http://thrift.apache.org/download 下载最新版本,截止今日(2016-05-23)最新版本为0.9.3
3) Maven项目设置依赖包
如果是Maven构建项目的,直接在pom.xml
中添加如下内容:
4).手动编译
如果自己编译lib包,把下载的压缩包解压到X
盘,然后在X:\thrift-0.8.0\lib\java
目录下运行ant
进行自动编译,会在X:\thrift-0.8.0\lib\java\build\
目录下看到编译好的lib包:libthrift-0.8.0.jar
三、基本概念
1.数据类型
基本类型:
bool
:布尔值,true
或false
,对应Java的boolean
byte
:8位有符号整数,对应Java的byte
i16
:16位有符号整数,对应Java的short
i32
:32位有符号整数,对应Java的int
i64
:64位有符号整数,对应Java的long
double
:64 位浮点数,对应Java的double
string
:utf-8编码的字符串,对应Java的String
结构体类型:
struct
:定义公共的对象,类似于C语言中的结构体定义,在Java中是一个JavaBean
容器类型:
list
:对应Java的ArrayList
set
:对应Java的HashSet
map
:对应Java的HashMap
异常类型:
exception
:对应Java的Exception
服务类型:
service
:对应服务的类
2.服务端编码基本步骤:
- 实现服务处理接口impl
- 创建
TProcessor
(业务处理器) - 创建
TServerTransport
() - 创建
TProtocol
(传输协议) - 创建
TServer
- 启动
Server
3.客户端编码基本步骤:
- 创建
Transport
- 创建
TProtocol
- 基于
TTransport
和TProtocol
创建Client
- 调用
Client
的相应方法
4.数据传输协议
TBinaryProtocol
: 二进制格式.TCompactProtocol
: 压缩格式TJSONProtocol
: JSON格式TSimpleJSONProtocol
: 提供JSON只写协议, 生成的文件很容易通过脚本语言解析
客户端和服务端的协议要一致
##四、实例演示
1. thrift生成代码
创建Thrift文件:D:\work\workspace\thriftworkspace\demo1\demoHello.thrift
,内容如下:
thrift-0.8.0.exe是官网提供的windows下编译工具,运用这个工具生成相关代码:
将生成的HelloWorldService.java
文件copy到自己测试的工程中,我的工程是用maven构建的,故在pom.xml
中增加如下内容:
如果是ant构建的工程,将libthrift-0.9.3.jar
加入到工程中
2. 实现接口Iface
java代码:HelloWorldImpl.java
|
|
3.TSimpleServer
服务端
简单的单线程服务模型,一般用于测试。
编写服务端server代码:HelloServerDemo.java
编写客户端Client代码:HelloClientDemo.java
|
|
先运行服务端程序,日志如下:
再运行客户端调用程序,日志如下:
测试成功,和预期的返回信息一致。
4.TThreadPoolServer 服务模型
线程池服务模型,使用标准的阻塞式IO,预先创建一组线程处理请求。
编写服务端代码:HelloServerDemo2.java
|
|
客户端Client代码和之前的一样,只要数据传输的协议一致即可,客户端测试成功,结果如下:
5.TNonblockingServer 服务模型
使用非阻塞式IO,服务端和客户端需要指定TFramedTransport
数据传输的方式。
编写服务端代码:HelloServerDemo3.java
|
|
编写客户端代码:HelloClientDemo3.java
|
|
客户端的测试成功,结果如下:
6.THsHaServer服务模型
半同步半异步的服务端模型,需要指定为:TFramedTransport
数据传输的方式。
编写服务端代码:HelloServerDemo4.java
|
|
客户端代码HelloClientDemo4.java
|
|
结果:Thrify client result =: Hi,HelloClientDemo4 welcome to thrift world.
7.异步客户端
编写服务端代码:HelloServerDemo5.java
|
|
编写客户端Client代码:HelloAsynClientDemo.java
|
|
先运行服务程序,再运行客户端程序,测试结果如下:
中国人都在使用的地球上最好玩的游戏
中国人都在使用的地球上最好玩的游戏
中国人都在使用的地球上最快的浏览器
中国人都在使用的地球上最厉害的安全软件
中国人都在使用的地球上最好的看图王
中国人都在使用的地球上最快速的视频软件
中国人都在使用的地球上最全的视频软件
中国人都在使用的地球上最好最全的压缩软件
中国人都在使用的地球上最好的音乐播放器
中国人都在使用的地球上最安全的杀毒软件
中国人都在使用的地球上最全的影视大全