Thrift的入门及使用场景

1. 前言
概述 : Thrift是Apache下的子项目,为的是实现多语言之间的通信和传输
- Thrift有自己的跨语言的通信框架,并提供一套库
- Thrift也是一个代码生成器,按照它的规则,生成多种编程语言的通讯过程代码
一般情况下跨机器的通信框架都是跨软件平台的(Linux,Windows),而Thrift的特点在于跨语言,例如C++,Java,Python,PHP,Ruby,Erlang,Perl,Haskell,C#,Cocoa,JavaScript等
上述的编程语言都可以通过Thrift实现通讯
带来的好处 : 不需要为编程语言发愁,如果服务端和客户端都要写,直接选择你最拿手的语言开发项目,然后Thrift会生成一个通讯框架
2. Thrift应用场景
Thrift主要分为三个部分,一个是Thrift代码生成器,一个是Thrift应用框架(库),一个是生成的代码,流程如图 :

如图所示,生成一个thrift应用,执行过程是 :
- 一个.thrift文件 : 这个文件是通信接口的定义,主要的是信息流的格式
- 编程语言 : 指定是哪个语言的(支持多语言,但开发者肯定是要在.thrift文件中指定语言的)
- Thrift代码生成器 : 在安装thrift过程中生成的,产生一定量的符合你的通信的格式代码
- Thrift应用框架库 : 也在安装过程中产生
- 其他第三方支持库
3.Thrift的类型
-
结构类型 : struct
这是c语言中的struct,将基本类型组合起来
-
容器类型 : container
这是集合类型(set/list/map),其中元素是任何thrift可识别的基本,结果,容器类型
-
异常类型 : exception
从数据结构就是结构类型,可认为是便于处理异常的处理而单独拿出来,预定义的,有特殊意义的结构类型
-
服务定义类型 : service
这个类型实际用来定义接口,Thrift代码生成器根据这个定义生成代码
Thrift的协议
这是对传输协议的封装,也就是传输采用二进制,XML或者text表示信息,它的功能有两个 :
- 双向的消息队列
- 信息的编码和解码
Thrift的版本
如果一个项目分开开发,那么版本是一定会遇到的问题,Thrift的版本是通过"fieldidentifiers"实现,每个结构由标识,结构中的每个域有其标识,这两个标识唯一决定了一个数据域,在解码时数据域的标识被检查,如果不能识别,数据域被抛弃,Thrift也可以通过"lsset"机制明确某些域的设置
四种情况 :
1. 添加数据域,旧客户端,新服务器端 : 客户端发送的数据中没有该域,服务器端能检测,可按缺省处理
2. 删除数据域,旧客户端,新服务器端 : 客户端发送的数据中有该域,服务器端忽略该域
3. 添加数据域,新客户端,旧服务器端 : 客户端发送数据中有该域,服务器忽略该域
4. 删除数据域,新客户端,旧服务器端 : 客户端发送得数据没有该域,服务器端可能不知道如何处理
Thrift得处理器(processor)
如何将各部分协调起来,形成代码(或用户代码的框架)。它有两个重要的类:TProcessor和TServer。TProcessor用来实现RPC调用,TServer是所有Server类的基类,TServer类主要处理连接和线程,而不管诸如传输、编码等。用户代码主要关注的一是.thrift文件,二就是这个接口。Thrift为此实现了TSimpleServer(单线程), TThreadedServer(每连接一个线程)和 TThreadPoolServer(线程池)等类。
Thrift的基本使用与学习
Thrift的数据类型
基本数据类型 :
bool : 布尔型 true或者false
byte : 8位有符号整数
i16 : 16位有符号整数(类似于Java的short)
i32 : 32位有符号整数(类似于Java的int)
i64 : 64位有符号整数(类似于Java的long)
double : 64位有符号整数(类似于Java的double)
string : utf-8的字符串(类似于Java的String)
这里注意Thrift的string的s是小写,与Java中的不同,如果在.thrift文件中写成String编译会报错
结果体类型 :
struct : 定义公共对象,类似于C语言中的结构体定义,在Java中是一个JavaBean
容器类型 :
list : 与Java中的ArrayList类似
set : 与Java中的HashSet类似
map : 与Java中的HashMap类似
异常类型
exception
服务类型
service
Thrift的服务端使用步骤
实现服务处理的接口impl
创建TProcessor
创建TServerTransport
创建TProtocol
创建TServer
启动Server
Thrift的客户端使用步骤
创建Transport
创建TProtocol
基于TTransport和TProtocol创建 Client
调用Client的相应方法

Thrift是Apache的跨语言通信框架,用于实现多语言间的高效通信。本文详细介绍了Thrift的入门知识,包括其应用场景、基本类型、协议、版本管理和处理器机制。此外,还涵盖了Thrift服务端和客户端的使用步骤,帮助开发者快速上手Thrift。
437

被折叠的 条评论
为什么被折叠?



