- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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
您可能关注的文档
- sr830x5电信版悦用户手册最终版.doc
- ssh企业培训体之数据抓取策略与高速缓存.ppt
- sslvpn终端哎问题解决办法-v15.doc
- sql转ac北cess的方法和常见问题解决办法.doc
- sql注入攻击付的原理分析与防范.doc
- starmps光机电一体化自动装配实训系图统starome-aa.doc
- stata软件基一本操作和数据分析入门.doc
- ssl双向认证握我手过程.doc
- ss100物料叩提升机施工方案.doc
- stephandahl交际与文化转型绿-文化的多样性、全球化以及文化的聚合.doc
- thinkpad在常见问题大全转载联想工程师博客.doc
- tita阳n公司正开发可在高层大气飞行5年的太阳能无人机.doc
- toc高趁级生产管理培训.ppt
- thrift之tp宏rotocol类体系原理及源码详细解析之紧凑协议类tcompactprotocolttcompactprotocol.doc
- toefl词汇词根联想记忆法4嗯5天突破版.doc
- tesco生鲜食品冷链管控+20120618军++中文2.ppt
- toeic亩单字--办公室篇.doc
- toshiba2嗨001品牌运作策略方案.ppt
- tpm工具2-精命细化点检130325.ppt
- theimportanceofbeinger大nest真诚的重要性.doc
最近下载
- 计算机专业(基础综合)模拟试卷3(共456题).pdf VIP
- 项目编号szcg2007041645 项目名称2007年度深圳市储备土地管理.doc
- 离婚登记申请受理回执单民法典版(可直接打印).pdf VIP
- 人教五年级数学上册1.2.2 倍数是小数的实际问题和乘法验算 课时训练.doc VIP
- 光伏电站检修规程(行业标准).docx VIP
- (新版)中移动传输专业L1认证考试复习题库-下(多选题汇总).docx VIP
- 基于大概念的初中音乐单元整体教学设计探索.doc VIP
- 《企业经营数据分析》课件.ppt VIP
- 新闻评论教程(第三版)全套PPT课件.pptx VIP
- 劳务合同范本(厨师、餐饮服务)5篇.docx VIP
文档评论(0)