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. c# 软件绑定网卡mac的实用

    一:网上搜c# 绑定网卡Mac 有好多信息,其中有篇分为几种方法获取mac 的方法,结果获得到的是一个list 队列的信息,信息获取到所有的物理网卡,无线网卡,蓝牙,隧道的网卡物理地址.对与软件绑定物 ...

  2. 4.Mysql中的运算符

    4.Mysql中的运算符运算符用来连接表达式.运算符包括:算术运算符.比较运算符.逻辑运算符.位运算符. 4.1 算术运算符算术运算符包括加(+).减(-).乘(*).除(/).取模(%,MOD) 5 ...

  3. (转)Eclipse中需要查看某个类的源码,直接按住Ctrl 然后点击想要查看的类或则方法

      文章转自:http://blog.sina.com.cn/s/blog_52f623240102vpcr.html   在Eclipse中需要查看某个类的源码,直接按住Ctrl 然后点击想要查看的 ...

  4. Java.WeakReference-SoftReference-PhantomReference

    Weak Reference, Soft Reference, Phantom Reference 1. Introduction "Weak reference objects, whic ...

  5. nested exception is java.lang.NoClassDefFoundError: org/springframework/dao/support/PersistenceExceptionTranslator

    该问题是少了一个spring-tx-的jar包,把该包加入到buildpath中就行了. 参考链接:http://blog.csdn.net/Rongbo_J/article/details/4666 ...

  6. mcu 通信数据解析

    串口发送一帧数据时,两个字节的间隔时间是多少? 波特率:发送二进制数据位的速率,习惯上用 baud 表示,即我们发送一位二进制数据的持续时间=1/baud. 如果波特率为9600,发送一个位需要的时间 ...

  7. 专访UI中国认证设计师卤大湿 | 一位UI大师关于UI设计的思考

    现如今,设计师可以说是一个自带光环的Title,很多深藏不漏的UI设计师们都在以自己的方式为产品设计做出贡献,卤大湿便是这其中之一. 精分青年卤大湿,这个在UI中国上是张酷酷的鲁迅头像的UI设计师,是 ...

  8. 多种方式判断PC端,IOS端,移动端

    1. 通过判断浏览器的userAgent,用正则来判断手机是否是IOS(苹果)和Android(安卓)客户端. var u = navigator.userAgent; var isAndroid = ...

  9. 什么时候出现死锁,如何解决?mysql 引擎? 多个like or 查询sql如何优化?什么是常量池?for条件执行顺序

    1. 什么时候出现死锁,如何解决?mysql 引擎? 多个like or 查询sql如何优化? 资源竞争导致死锁,比如A B 同时操作两条记录,并等待对方释放锁. 优化sql, 加缓存,主从(如读写分 ...

  10. 64位ubuntu 兼容32位

    http://www.cnblogs.com/mliudong/p/4086797.html 首先要打开64位系统对32位的支持 第一步:确认64为架构的内核 dpkg --print-archite ...