thrift 重要的几个组件有 :数据类型,transport,protocol,versioning,processor

1.数据类型 thrift的数据类型有1.一些原生类型,比如string,int等等 2.container 有list set map 3. 自定义的复杂类型struct

2.transport 和nio的channel很像,负责底层数据的读写,有很多种类型,比如从socket,文件,或者memory中读写等

3.protocal 负责组织数据流的格式,数据的序列化,反序列化等等

4.versioning thrift每个组件都可以有自己实现版本控制的方法。在struct里,通过把idetifyID和数据类型结合起来构成这个字段的唯一标识码。在transport和protocol里,可以分别对传输的数据进行自定义的版本标识

对于service的接口,方法名貌似不能重复,至少看源码的时候,发现直接根据方法名进行hash,找到对应的processFunction。方法的入参,和struct一样,通过identifyId和数据类型来共同标识一个参数。

基于通过identifyID和数据类型结合的方式来定义一个变量的方式,带来的一个问题是,在增加或者删除变量的时候,不要对原有的字段的identifyID进行修改,否则会出现反序列化失败的情况

5.processor 在processor里调用transport和protocol对数据进行读写,序列化和反序列化,还有中间的业务逻辑的调用等等

看了下TBaseProcessor 的实现,发现现在代码里基本都是通过这个基类来实现Processor的功能。每个方法都被抽象成一个ProcessFunction,然后通过方法名来进行hash,拿到对应的ProcessFunction,然后执行相应的方法。

ProcessFunction中,首先通过一个需要子类实现的getEmptyArgsInstance方法,实例化一个代表方法中参数的对象,然后通过这个对象来对inputPtotocol进行读取,把参数都读进来。

读进来后,再通过getResult方法,来对真正的方法进行调用,拿到结果,然后再通过outPutPtotocol写出去

这种Procesor实现的好处是,不用通过反射来对目标方法进行调用 坏处是,每个方法都要创建相应的Function类,但是这些代码都是自动生成的,不需要我们自己去实现

另一个比较重要的组件是Server,Server提供的功能是把服务(ip,端口等)向外暴露,对请求进行处理(对connection进行接收,数据读取等),比如是单线程处理,还是多线程处理,还是在线程池里进行处理。对上述的组件进行组合,比如选用什么样的protocol,选用什么样的transport等,并调用相应的组件对数据进行读取和解析等等。

thrift学习总结的更多相关文章

  1. thrift学习笔记

    Thrift学习笔记 一:thrift介绍 Thrift是facebook开发的用来处理各不同系统之间数据通讯的rpc服务框架,后来成为apche的开源项目.thrift支持多种程序语言,包括Java ...

  2. Thrift学习

    Thrift学习 一:thrift介绍 Thrift是facebook开发的用来处理各不同系统之间数据通讯的rpc服务框架,后来成为apche的开源项目.thrift支持多种程序语言,包括Java,P ...

  3. Thrift学习记录

    Thrift学习记录 Thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发.它结合了功能强大的软件堆栈和代码生成引擎,以构建在C++,Java,Python,PHP,Ruby,Erlang, ...

  4. RPC之Thrift学习实战

    关于Thrift的学习实战请参考:http://blog.csdn.net/column/details/slimina-thrift.html

  5. rpc框架之 thrift 学习 2 - 基本概念

    thrift的基本构架: 上图源自:http://jnb.ociweb.com/jnb/jnbJun2009.html 底层Underlying I/O以上的部分,都是由thrift编译器生成的代码, ...

  6. rpc框架之 thrift 学习 1 - 安装 及 hello world

    thrift是一个facebook开源的高效RPC框架,其主要特点是跨语言及二进制高效传输(当然,除了二进制,也支持json等常用序列化机制),官网地址:http://thrift.apache.or ...

  7. Apache Thrift学习之二(基础及原理)

    Apache Thrift 是 Facebook 实现的一种高效的.支持多种编程语言的远程服务调用的框架.本文将从 Java 开发人员角度详细介绍 Apache Thrift 的架构.开发和部署,并且 ...

  8. Apache Thrift学习之一(入门及Java实例演示)

    目录: 概述 下载配置 基本概念 数据类型 服务端编码基本步骤 客户端编码基本步骤 数据传输协议 实例演示(java) thrift生成代码 实现接口Iface TSimpleServer服务模型 T ...

  9. 跨平台通信中间件thrift学习【Java版本】(转)

    转自:http://neoremind.com/2012/03/%E8%B7%A8%E5%B9%B3%E5%8F%B0%E9%80%9A%E4%BF%A1%E4%B8%AD%E9%97%B4%E4%B ...

随机推荐

  1. iOS.GetCurrentTimestamp

    Cocoa 中测量时间的方法 1. The Methods to Get Current Timestamp iOS中获取时间戳的方法: A. CACurrentMediaTime() B. gett ...

  2. gerrit管理下的git代码提交小技巧

    1.提交代码git checkout targetbranch 切换至目标分支git pull origin targetbranch 拉取目标分支最新内容git add 修改文件git commit ...

  3. RNA测序相对基因表达芯片有什么优势?

    RNA测序相对基因表达芯片有什么优势? RNA-Seq和基因表达芯片相比,哪种方法更有优势?关键看适用不适用.那么RNA-Seq适用哪些研究方向?是否您的研究?来跟随本文了解一下RNA测序相对基因表达 ...

  4. UIButton 设置图片文字垂直居中排列

    #pragma mark 按钮图片文字垂直居中排列 -(void)setButtonContentCenter:(UIButton *)button { CGSize imgViewSize,titl ...

  5. [最新原创电子书]lazarus开发者入门及中级教程

    目前市面上没有任何一本完整的书,介绍Lazarus,Firebird这两个优秀的开发工具,同时还有一个作为他们之间桥梁的开发套件ZeosDBO,也没有任何完整的中文开发指南,本书以这三种开发套件为主线 ...

  6. 让eclipse调试和豌豆荚并存

    豌豆荚有一个设置 设置->高级设置->开发者模式 勾上开发者模式 确定. 你什么手机的驱动都不用安装了. 就可以直接使用豌豆荚,也可以使用eclipse进行调试.

  7. divinglaravel.com

    https://divinglaravel.com/ 这是一个深入 laravel 的学习网站

  8. idea单元测试左侧装订线中的颜色指示器设置

    又是idea,idea确实很智能,由于我下载的idea设置可能初始化了,所以我找不到单元测试率覆盖的具体代码情况,到底哪些代码覆盖,哪些代码未覆盖:

  9. mongoDB(Window)

    1.启动命令 mongod --dbpath F:\mongo\data             注:dbpath路径不能有空格,我开始用F:\Program Files,就因为有一个空格,失败了. ...

  10. sql 用Group by分组后,取每组的前几条记录

    转自:http://blog.163.com/jeson_lwj/blog/static/135761083201052411115783/ --查询每门课程的前2名成绩 CREATE TABLE S ...