您的位置:首页 > 其它

thrift初步认识

2014-05-04 10:26 232 查看
1. thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。

不同开发语言开发的服务可以通过该框架实现通信。

2. thrift允许定义一个简单的定义文件中的数据类型和服务接口,以作为输入文件,编译器生成代码用来方便地生成RPC客户端和服务器通信的无缝跨编程语言。

3. Thrift通过接口定义语言 (interface definition language,IDL) 来定义数据类型和服务,Thrift接口定义文件由Thrift代码编译器生成thrift目标语言的代码(目前支持C++,Java,Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk和OCaml),并由生成的代码负责RPC协议层和传输层的实现。

Dsw77hh

Server 服务模型

Handler 数据处理接口

Processor 数据处理对象

Protocol 数据传输协议(定义数据传输格式,可以为二进制或者XML等)

Transport 数据传输方式(定义数据传输方式,可以为TCP/IP传输,内存共享或者文件共享等)

(1)支持的传输格式

TBinaryProtocol –
二进制格式.

TCompactProtocol –
压缩格式

TJSONProtocol – JSON格式

TSimpleJSONProtocol –提供JSON只写协议,
生成的文件很容易通过脚本语言解析。

TDebugProtocol –
使用易懂的可读的文本格式,以便于debug

(2)支持的数据传输方式

TFileTransport:文件(日志)传输类,允许client将文件传给server,允许server将收到的数据写到文件中。

THttpTransport:采用Http传输协议进行数据传输

TSocket:采用TCP
阻塞式Socket进行数据传输

TZlibTransport:压缩后对数据进行传输,或者将收到的数据解压。当前无Java实现
TMemoryTransport – 将内存用于I/O. java实现时内部实际使用了简单的ByteArrayOutputStream。
TBufferedTransport:对某个Transport对象操作的数据进行buffer,即从buffer中读取数据进行传输,或者将数据直接写入buffer

TFramedTransport:以frame为单位进行传输,非阻塞式服务中使用。同TBufferedTransport类似,也会对相关数据进行buffer,同时,它支持定长数据发送和接收。

TMemoryBuffer:从一个缓冲区中读写数据

TNonblockingTransport —— 使用非阻塞方式,用于构建异步客户端

(3)支持的服务模型

TSimpleServer –
简单的单线程服务模型,标准阻塞式,常用于测试

TThreadedServer -
多线程服务模型,使用阻塞式IO,每个请求创建一个线程。TThreadedServer是多线程处理请求,来一个连接请求就开启一个线程处理它,处理完就退出线程。处理线程有2种类型:PthreadThread和BoostThread,前者是基posix函数,后者基于boost线程类,它们均通过对应的工厂类创建;还有个Task类,继承于Runnable,主要的处理请求流程在此实现。

TThreadPoolServer –
线程池服务模型,使用标准的阻塞式IO,预先创建一组线程处理请求。

TNonblockingServer –
多线程服务模型,使用非阻塞式IO(需使用TFramedTransport数据传输方式)

处理大量更新的话,主要是在TThreadedServer和TNonblockingServer中进行选择。TNonblockingServer能够使用少量线程处理大量并发连接,但是延迟较高;TThreadedServer的延迟较低。实际中,TThreadedServer的吞吐量可能会比TNonblockingServer高,但是TThreadedServer的CPU占用要比TNonblockingServer高很多。

服务器编写的一般步骤:

1. 创建Handler

2. 基于Handler创建Processor

3. 创建Transport

4. 创建Protocol方式

5. 基于Processor, Transport和Protocol创建Server

6. 运行Server

客户端编写的一般步骤:

1. 创建Transport

2. 创建Protocol方式

3. 基于Transport和Protocol创建Client

4. 运行Client的方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: