thrift初步认识

来源:互联网 发布:中国电信盒子安装软件 编辑:程序博客网 时间:2024/06/06 19:55

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种类型:PthreadThreadBoostThread,前者是基posix函数,后者基于boost线程类,它们均通过对应的工厂类创建;还有个Task类,继承于Runnable,主要的处理请求流程在此实现。
TThreadPoolServer 线程池服务模型,使用标准的阻塞式IO,预先创建一组线程处理请求。
TNonblockingServer多线程服务模型,使用非阻塞式IO(需使用TFramedTransport数据传输方式)

 

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

 

服务器编写的一般步骤:
1.
创建Handler
2.
基于Handler创建Processor
3.
创建Transport
4.
创建Protocol方式
5.
基于Processor, TransportProtocol创建Server
6.
运行Server

 

客户端编写的一般步骤:
1.
创建Transport
2.
创建Protocol方式
3.
基于TransportProtocol创建Client
4.
运行Client的方法

0 0
原创粉丝点击