所在的位置: php >> php市场 >> Thrift的原理和使用

Thrift的原理和使用

Thrift是一个跨语言的服务部署框架,最初由Facebook于年开发,年进入Apache开源项目。Thrift通过IDL(InterfaceDefinitionLanguage,接口定义语言)来定义RPC(RemoteProceduCall,远程过程调用)的接口和数据类型,然后通过thrift编译器生成不同语言的代码(目前支持C++,Java,Python,PHP,Ruby,Erlang,Perl,Haskell,C#,Cocoa,Smalltalk和OCaml),并由生成的代码负责RPC协议层和传输层的实现。

Thrift架构

TProtocol(协议层),定义数据传输格式,例如:

TBinaryProtocol:二进制格式;TCompactProtocol:压缩格式;TJSONProtocol:JSON格式;TSimpleJSONProtocol:提供JSON只写协议,生成的文件很容易通过脚本语言解析;TDebugProtocol:使用易懂的可读的文本格式,以便于debug

TTransport(传输层),定义数据传输方式,可以为TCP/IP传输,内存共享或者文件共享等)被用作运行时库。

TSocket:阻塞式socker;TFramedTransport:以frame为单位进行传输,非阻塞式服务中使用;TFileTransport:以文件形式进行传输;TMemoryTransport:将内存用于I/O,java实现时内部实际使用了简单的ByteArrayOutputStam;TZlibTransport:使用zlib进行压缩,与其他传输方式联合使用,当前无java实现;

Thrift支持的服务模型

TSimpleServer:简单的单线程服务模型,常用于测试;TThadPoolServer:多线程服务模型,使用标准的阻塞式IO;TNonblockingServer:多线程服务模型,使用非阻塞式IO(需使用TFramedTransport数据传输方式);

Thrift实际上是实现了C/S模式,通过代码生成工具将thrift文生成服务器端和客户端代码(可以为不同语言),从而实现服务端和客户端跨语言的支持。用户在Thirft文件中声明自己的服务,这些服务经过编译后会生成相应语言的代码文件,然后客户端调用服务,服务器端提服务便可以了。

一般将服务放到一个.thrift文件中,服务的编写语法与C语言语法基本一致,在.thrift文件中有主要有以下几个内容:变量声明(variable)、数据声明(struct)和服务接口声明(service,可以继承其他接口)。

Thrift语法

Thrift文件支持shell命令,因此thrift是可执行的。

Thrfit支持shell注释风格(#),也支持C/C++语言中单行(//)或者多行(/**/)注释风格

数据类型

1、基本类型

bool,布尔型,1个字节;byte,有符号单字节;i16,有符号16位整型;i,有符号位整型;i64,有符号64位整型;double,64位浮点数;string,字符串;binary,字节数组;

注意:thrift不支持无符号整型。

、容器

mapt1,t,字典;listt1,列表;sett1,集合;

注意:容器中的元素类型可以是除了service以外的任何合法thrift类型(包括结构体和异常)。

、结构体struct

Thrift结构体在概念上同C语言结构体类型—-一种将相关属性聚集(封装)在一起的方式;

在面向对象语言中,thrift结构体被转换成类。

structWork{1:inum1=0,:inum,:Operationop,4:optionalstring


转载请注明:http://www.aierlanlan.com/rzdk/4231.html