`

Thirft框架介绍

阅读更多

1、前言

 

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

本文组织结构如下:1)引言 2)架构3)支持的数据传输格式、数据传输方式和服务模型 4)Thrift安装 5)利用Thift部署服务

 

2、架构

Thrift实际上是实现了C/S模式,通过代码生成工具将接口定义文件生成服务器端和客户端代码(可以为不同语言),从而实现服务端和客户端跨语言的支持。用户在Thirft描述文件中声明自己的服务,这些服务经过编译后会生成相应语言的代码文件,然后用户实现服务(客户端调用服务,服务器端提服务)便可以了。其中protocol(协议层, 定义数据传输格式,可以为二进制或者XML等)和transport(传输层,定义数据传输方式,可以为TCP/IP传输,内存共享或者文件共享等)被用作运行时库。上图的详细解释参考引用【1】。

3、 支持的数据传输格式、数据传输方式和服务模型

(1)支持的传输格式

TBinaryProtocol – 二进制格式.

TCompactProtocol – 压缩格式

TJSONProtocol – JSON格式

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

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

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

TSocket -阻塞式socker

TFramedTransport – 以frame为单位进行传输,非阻塞式服务中使用。

TFileTransport – 以文件形式进行传输。

TMemoryTransport – 将内存用于I/O. java实现时内部实际使用了简单的ByteArrayOutputStream。

TZlibTransport – 使用zlib进行压缩, 与其他传输方式联合使用。当前无java实现。

(3)支持的服务模型

TSimpleServer – 简单的单线程服务模型,常用于测试

TThreadPoolServer – 多线程服务模型,使用标准的阻塞式IO。

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

4、 Thrift安装

下载:http://incubator.apache.org/thrift/download/

安装要求:

Unix/linux 系统,windows+cygwin

C++语言:g++、boost

java 语言:JDK、Apache Ant

其他语言:Python、PHP、Perl, etc…

编译安装:./configure –》make –》make install

1、 利用Thrift部署服务

主要流程:编写服务说明,保存到.thrift文件–》根据需要, 编译.thrift文件,生成相应的语言源代码–》根据实际需要, 编写client端和server端代码。

(1).thrift文件编写

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

下面分析Thrift的tutorial中带的例子tutorial.thrift

包含头文件:

59行:include “shared.thrift”

指定目标语言:

65行:namespace cpp tutorial

定义变量:

80行:const i32 INT32CONSTANT = 9853

定义结构体:

103行:struct Work {

1: i32 num1 = 0,

2: i32 num2,

3: Operation op,

4: optional string comment,

}

定义服务:

service Calculator extends shared.SharedService {

void ping(),

i32 add(1:i32 num1, 2:i32 num2),

i32 calculate(1:i32 logid, 2:Work w) throws (1:InvalidOperation ouch),

oneway void zip()

}

     要生成C++代码:./thrift --gen cpp tutorial.thrift,结果代码存放在gen-cpp目录下
     要生成java代码:./thrift --gen java tutorial.thrift,结果代码存放在gen-java目录下
      ….. 

(2) client端和server端代码编写

client端和sever端代码要调用编译.thrift生成的中间文件。

下面分析cpp文件下面的CppClient.cpp和CppServer.cpp代码

在client端,用户自定义CalculatorClient类型的对象(用户在.thrift文件中声明的服务名称是Calculator, 则生成的中间代码中的主类为CalculatorClient), 该对象中封装了各种服务,可以直接调用(如client.ping()), 然后thrift会通过封装的rpc调用server端同名的函数。

在server端,需要实现在.thrift文件中声明的服务中的所有功能,以便处理client发过来的请求。

【参考资料】
1、 http://wiki.apache.org/thrift/
2、 http://jnb.ociweb.com/jnb/jnbJun2009.html
3、 http://blog.rushcj.com/tag/thrift/
4、 http://www.vvcha.cn/c.aspx?id=31984

from  http://dongxicheng.org/search-engine/thrift-framework-intro/

分享到:
评论

相关推荐

    thrift框架

    简要介绍了thrift框架的原理及使用方法,附带一个搭建thrift工程的例子。

    thrift vc2008版本静态库

    1. **Thrift 框架介绍**: - Thrift 是由Facebook开发并开源的,后来被Apache基金会接纳为顶级项目。 - 它最初设计用于解决内部系统间的大量数据通信问题,后来成为通用的RPC(远程过程调用)框架。 - Thrift ...

    Thrift框架使用分享

    Thrift框架的网络栈由传输层(Transport Layer)和协议层(Protocol Layer)组成。Transport层负责数据的传输,可以是基于TCP/IP的网络传输,内存共享或者文件共享等。协议层则定义了数据的传输格式,例如二进制、...

    基于Thrift框架的数据交换方案_梁明炯.pdf

    【Thrift框架详解】 Thrift框架是一个开源的跨语言服务开发工具,最初由Facebook开发并在2008年成为Apache的子项目。Thrift的主要目标是解决系统间的数据交换问题,特别是针对异构系统间的高效通信。它提供了一种...

    Thrift RPC客户端的服务化框架代码

    Thrift RPC客户端的服务化框架代码主要涉及了两个关键概念:Thrift和RPC(Remote Procedure Call,远程过程调用)。Thrift是由Facebook开发的一种开源跨语言服务框架,它允许定义数据类型和服务接口,然后自动生成...

    Thrift框架所用的包

    压缩包中包含四个文件,libthrift-0.9.1.jar,slf4j-api-1.7.12.jar,demoHello.thrift,thrift-0.9.3.exe.使用方法将前两个包导入到项目中。然后将后两个文件放在同一个目录,在控制台中执行如下命令thrift-0.9.3.exe ...

    Thrift框架分析.pdf

    Thrift框架是一个开源的跨语言服务部署框架,主要用于实现RPC(远程过程调用)服务。由Facebook开发并开源,其源代码可以在Apache Thrift官网下载。Thrift的核心特性在于其跨语言能力,它提供了一个多语言的库,包括...

    Java通过Thrift框架实现通讯的示例代码

    Java通过Thrift框架实现通信是一种高效、跨语言的服务交互方式,尤其在分布式系统中广泛应用。Thrift是由Facebook开源的一种高性能的RPC(Remote Procedure Call)框架,它能够将服务定义为接口,然后自动生成多种...

    thrift通过openssl加密证书实现双向通信

    thrift框架通过vs2013编译好的静态库,然后通过vs2013实现双向通信代码,通信协议利用openssl加密证书的方式来实现,本资源给出了完整的实现代码,证书可以在网上百度一下,看看如何生成客户端和服务端的,然后编译...

    基于Java语言的Thrift框架设计源码学习与实践指南

    本项目为基于Java语言的Thrift框架设计源码学习与实践指南,包含52个文件,其中Java源文件30个,属性文件4个,Git忽略文件3个,XML文件3个,Thrift文件3个,JAR包文件2个,CMD脚本2个,YML文件2个以及Markdown文件1...

    基于Thrift框架RPC的研究与实现_田翠珍.pdf

    Apache Thrift 是一个高效、可扩展的跨语言通信框架,起源于Facebook,于2007年成为Apache软件基金会的开源项目。它被设计用来解决不同编程语言之间的数据交换问题,通过提供一套定义数据结构和服务的接口定义语言...

    thrift框架在linux下编译,实现双向通信demo

    thrift框架在linux下编译,实现双向通信demo,thrift使用的是0.9.3版本,编译后通过自己编写的demo实现客户端服务端的双向通信。已完成编译,源码也在里面,需要libevent和boost库以及openssl库,这些三方库自己下载...

    thrift框架示例

    在"thrift框架示例"中,我们关注的是如何使用Thrift在客户端和服务器端之间建立通信。Thrift的流程通常包括以下几个步骤: 1. **定义服务接口**:首先,我们需要使用Thrift IDL编写服务接口定义文件,例如`service....

    Thrift双向通讯java代码

    Thrift是一种开源的跨语言服务开发框架,由Facebook于2007年开发并开源,其设计目标是高效、简洁地构建可扩展的服务。Thrift通过定义一种中间表示(IDL,Interface Definition Language)来描述服务,然后自动生成...

    Thrift架构介绍.docx

    Thrift 是一个强大的跨语言服务部署框架,起源于 Facebook,并在2008年成为Apache软件基金会的开源项目。它的核心在于使用接口定义语言(IDL)来定义远程过程调用(RPC)接口和数据类型,之后通过Thrift编译器生成...

    从Thrift服务框架思考服务器框架-真的很有收获

    Thrift框架 配图一张,主程序的流程图: 底层的(I/O)模块:负责实际的数据传输,比如Socket、文件、压缩数据流等的传输。 TTransport(负则传输的模块,就是底层I/O的实现):每一种传输方式都对应一个该模块,比如...

    thrift介绍与实践

    Thrift是一种开源的跨语言服务开发框架,由Facebook于2007年设计并发布,后来成为Apache软件基金会的顶级项目。它旨在通过定义一种简单的接口定义语言(IDL)来解决分布式系统之间的通信问题,允许程序员在不同的...

    thrift框架在windows上面实现,编译,并且实现客户端服务端双向通信的demo

    thrift框架使用的0.9.3版本,将其在windows平台上编译,对vs2008和vs2013都实现了编译,且对这两个平台的双向通信demo也实现了编译,源码就在压缩包里面。需要libevent和boost库以及openssl库,这些三方库自己下载...

    thrift的使用介绍

    Thrift是一种开源的跨语言服务开发框架,由Facebook于2007年设计并发布,其初衷是为了在不同编程语言之间提供高效、轻量级的通信机制。Thrift通过定义一种中间表示(IDL,Interface Definition Language)来描述服务...

Global site tag (gtag.js) - Google Analytics