ImageVerifierCode 换一换
格式:DOCX , 页数:10 ,大小:286.13KB ,
资源ID:20702864      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/20702864.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(thrift框架分析.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

thrift框架分析.docx

1、thrift框架分析Thrift 框架分析1 分类: 数据库 2010-11-02 17:53 1646人阅读 评论(0) 收藏 举报 本文先整体性地介绍Thrift框架,然后分析Thrift源码中自带的toturial例子,作为Thrift的入门吧。一Thrift介绍Thrfit是一种开源的跨语言的服务部署框架,这里的服务是指RPC,即远程过程调用了。它最初是由Facebook开发的,后来Facebook将其开源了。因此你可以很方便地下载到它的源代码,下载地址为:http:/incubator.apache.org/thrift/download/Thrift的体系架构如下:实际上Thrif

2、t提供了一个支持多语言的Lib库,包括C+、Java、PHP、Python、Ruby等。同时它自定义了一种中间语言(Thrift IDL),用于编写统一格式的thrift配置文件,定义数据类型。然后根据此配置文件调用lib库中的生成器来生成指定语言的服务,这正体现其跨语言的特性。Thrift支持五种数据类型:Base Types:基本类型Struct:结构体类型Container:容器类型,即List、Set、MapException:异常类型Service:类似于面向对象的接口定义,里面包含一系列的方法下面是Thrift中所支持的类型(前三种类型)Thrift通过两种抽象机制来完成底层客户端

3、和服务器端的通信,分别是:1)Transport:抽象了底层网络通信部分的接口TTransport对Java I/O层进行封装,抽象了底层网络通信部分的接口。主要是对以下6种接口进行了抽象:open, close, isopen, read, write, flush。2)Protocol:抽象了对象在网络中传输部分的接口,它规定了thrift的RPC可以调用的接口。这些接口是为了传输不同类型的数据而设计的。Transport在传输数据时是不区分所传的数据类型的,一律以流的形式传输。所以Protocol类在Transport类之上实现了按数据类型来传输数据。Transport的类结构实现:so

4、cket的封装TTransport是一个抽象的基类,对socket进行了封装,提供了对流的一系列操作接口。thrift提供了两种常用类型的Socket,一种是阻塞式的,两外一种是非阻塞式的。这两种socket的区别实际上就是传统IO和NIO的区别,这里就不累述了。通过close()和open()来建立和关闭连接;通过read()和write()来对流进行读写。ServerSocket的封装TServerSocket同样是一个抽象的基类,对ServerSocket进行了封装。它是以非阻塞的IO方式进行通讯的。通过listen()来监听连接请求,通过accept()来获取。Protocol的类结构

5、实现:TProtocol提供了一系列按类型进行读写的接口。并持有一个TTransport对象的引用,所以TProtocol类是依赖于TTransport类的。其中定义了一系列的write和read方法,应该说每种类型对应一套write和read方法。在write和read方法中会分别调用TTransport中的write和read方法进行实际的读写操作。RPC的具体实现:1. TProcessor它是thrift中最简单的一个接口了,仅包含一个方法:bool process(TProtocol in, TProtocol out)throws TException此方法有两个参数in和out,

6、分别用于从socket中读取数据和向scoket中写数据。每个service对象中都会包含一个实现了此接口的类对象(Process),这个类就是处理RPC请求的核心。2. TServerTServer相当于一个容器,拥有生产TProcessor、TTransport、TProtocol的工厂对象。它的工作流如下:1)使用TServerTransport来获取一个TTransport(客户端的连接)2)使用TTransportFactory来将获取到的原始的transport转化为特定的transport3)使用TProtocolFactory来为获取TTransport的输入输出,即TProt

7、ocol4)唤醒TProcessor的process方法,处理请求并返回结果二. tutorial 分析现在结合一个例子来研究如何应用Thrift。例子就是thrift源代码中自带的tutorial,测试语言方面则选择java。在此之前,必须安装好Thrift,安装过程就不累述了,可以参考thrift中的readme文件。1.我们可以使用Ant工具将thrift的java lib打包成jar文件,这样可以直接导入Eclipse使用。进入到tutorial根目录,里面有两个文件.thrift,这就是上面讲到的配置文件了,里面定义了我们要提供的服务。下面是其中的一个文件的内容:+ expand s

8、ourceview plaincopy to clipboardprint?2.输入如下命令生成代码:thrift -r -genjava tutorial.thrift完成后,会发现多了一个gen-java的文件夹,这就是生成的代码。我们看下代码结构:两个service类(ShareService和Calculator)均包含两个内部类:Client和Processor,前者用于客户端,后者用于服务器端。这两个类均包含一套service方法的实现(ping、add、calculate、zip),RPC就是基于这套共用方法实现的。3.经过上面的两步,我们得到了两个jar文件,libthrift

9、.jar和tutorial.jar,至此环境已经部署完成。分别运行JavaServer和JavaClient,开启服务器端和客户端,观察运行结果。JavaServer.java+ expand sourceview plaincopy to clipboardprint?JavaClient.java+ expand sourceview plaincopy to clipboardprint?ping()的序列图:4.当然,我们可以使用不同语言的客户端和服务器端。例如:我们可以将客户端换成php语言的。 1)进入到tutorial根目录,执行如下命令:thrift -gen php shar

10、ed.thrift thrift -gen php tutorial.thrift 完成后会发现多了一个gen-php目录。 2)启动java服务器端,方法同上。 3)启动php客户端,观察测试结果。 PS:我的服务器端运行在Windows系统中,直接将生成的libthrift.jar和tutorial.jar导入到Eclipse中,然后运行JavaServer文件即可。而客户端呢我是运行在虚拟机的Ubuntu系统中,启动客户端前需安装php(apt-get install php5)。同时,修改PhpClient.php中的ip为宿主机的ip。最后,输入如下命令启动:php PhpClient.php。 通过输出显示,客户端和服务器端的语言不影响执行的结果,这正是thrift的跨语言性。Reference:http:/incubator.apache.org/thrift/static/thrift-20070401.pdf

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1