thrift之tprocess类体系原理店及源码详细解析.docVIP

thrift之tprocess类体系原理店及源码详细解析.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
thrift之tprocess类体系原理店及源码详细解析

  之前对Thrift自动生成代码的实现细节做了详细的分析,下面进行处理层的实现做详细分析了!会利用到自动代码生成的知识。 ?   这部分是协议层和用户提供的服务实现之间的纽带,定义了调用服务实现的接口框架,真正实现某种服务接口是通过上一章介绍的代码生成工具生成的代码。本章将介绍这个框架的基本原理,然后通过生成的一个实例来具体介绍怎样完成一次完整的服务,这个可能涉及到下面章节的一些知识,对于这些知识不详细分析其功能,只是介绍它在其中起什么作用。选择的实例是Facebook内部用这个框架实现的一个分布式日志收集系统scribe。下面是这部分相关类的类关系图: ?   从上图中可以看出TProcessor是这个部分的顶层基类,其他之类基本上都是通过Thrift代码生成工具生成的, HYPERLINK 只有少数是为了扩展一些功能而直接写代码实现,如PeekProcessor类就增加了一些对原始数据处理的功能。scribeProcessor和FacebookServiceProcessor类就是用代码生成器根据IDL文件生成的,也是我们后面需要分析的一个实例。 第一节?服务接口调用框架分析   这个基本的框架包括三个类,一个就是抽象类TProcessor,负责调用用户定义的服务接口,从一个接口读入数据,写入一个输出接口。一个最主要的函数定义如下: 1 virtual bool process(boost::shared_ptrprotocol::TProtocol in, 2 3 boost::shared_ptrprotocol::TProtocol out, void* connectionContext) = 0; ? 这个函数是一个纯虚函数,所以继承这个类的子类都必须实现这个函数,这个函数就是最主要的数据传输功能。 第二个类就是负责处理TProcessor类产生的事件的类TProcessorEventHandler,主要定义了一些当某事件发生时的处理函数,例如当读取参数之前可以做一些处理功能。下面是这个类定义的各个成员函数,每一个函数都处理一种事件发送时的情况: 函数名称 函数功能 getContext 调用其他回调函数之前调用,期望返回一些有序的上下文对象以便传递给其他回调函数使用 freeContext 期望释放一个上下文有关的资源 preRead 在读参数以前调用 postRead 在读参数和处理函数之间调用 preWrite 在处理和写响应之间调用 postWrite 在写响应之后调用 HYPERLINK asyncComplete 当一个异步函数成功完成调用时调用 handlerError 如果处理函数抛出没有定义的异常就会调用此函数 最后一个类就是TProcessorContextFreer类,这个类是一个帮助类,帮助生成的代码来释放上下文资源。 第二节?基于框架生成的服务实例分析 本节将对scribe服务器采用的服务实现进行详细分析。 1?接口定义语言文件(IDL) (1)Facebook内部共用服务协议 主要有两个文件,一个是在Thrift中定义,是用于Facebook内部的一些接口服务定义,这个不仅仅用于scribe服务器,可能还用于Facebook内部其他系统,这个文件内容如下: 1 namespace java com.facebook.fb303 2 3 namespace cpp facebook.fb303 4 5 namespace perl Facebook.FB303 6 7 enum fb_status { 8 9 DEAD = 0, 10 11 STARTING = 1, 12 13 ALIVE = 2, 14 15 STOPPING = 3, 16 17 STOPPED = 4, 18 19 WARNING = 5, 20 21 } 22 23 service FacebookService { 24 25 string getName(), 26 27 string getVersion(), 28 29 fb_status getStatus(), 30 31 string getStatusDetails(), 32 33 mapstring, i64 getCounters(), 34 35 i64 getCounter(1: string key), 36 37 void setOption(1: string key, 2: string value), 38 39 string getOption(1: s

文档评论(0)

134****9291 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档