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. python 虚拟环境操作 virtualenv +virtualenvwrapper

    Window 下创建python的虚拟环境 下载工具 pip install virtualenv 创建虚拟环境目录 # 注意此命令创建的虚拟环境目录是在当前目录下 virtualenv testen ...

  2. Linux yum源完全配置

    一.简介 yum主要功能是更方便的添加/删除/更新RPM包,自动解决包的依赖性问题,便于管理大量系统的更新问题,其理念是使用一个中心仓库(repository)管理一部分甚至一个distributio ...

  3. Python while for if....else

    1函数input()的工作原理: 函数input()让程序暂停运行,等待用户输入一些文本.获取用户输入后,python将其存储在一个变量(即要向用户显示的提示或说明) raw_input    是Py ...

  4. [中英对照]Introduction to DPDK: Architecture and Principles | DPDK概论: 体系结构与实现原理

    [中英对照]Introduction to DPDK: Architecture and Principles | DPDK概论: 体系结构与实现原理   Introduction to DPDK: ...

  5. poj_1979(dfs)

    Red and Black There is a rectangular room, covered with square tiles. Each tile is colored either re ...

  6. linux 使用笔记6

    ---恢复内容开始--- 1.内容追加 把一个文件的内容追加到另一个文件中: cat first.txt >> second.txt//追加到second.txt文件的末端    cat ...

  7. 洛谷3119 [USACO15JAN]草鉴定Grass Cownoisseur

    原题链接 显然一个强连通分量里所有草场都可以走到,所以先用\(tarjan\)找强连通并缩点. 对于缩点后的\(DAG\),先复制一张新图出来,然后对于原图中的每条边的终点向新图中该边对应的那条边的起 ...

  8. Hotspot参数分析

    -XX:+HeapDumpOnOutOfMemoryError 让虚拟机在出现内存溢出异常时Dump出当前的内存堆转储快照以便事后进行分析 -Xmx与-Xms 虚拟机堆参数 -Xoss 设置本地方法栈 ...

  9. npm run build出问题十分通用的解决方法

    1.C:\NanoFabric\52ABP\SPAHost\ClientApp\node_modules 原来的目录重命名为C:\NanoFabric\52ABP\SPAHost\ClientApp\ ...

  10. mongoDB(Linux)

    启动  service mongod start 安装好后,输入mongo进入控制台 创建数据库 use baseName db.createCollection("game_record& ...