thrift学习总结
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学习总结的更多相关文章
- thrift学习笔记
Thrift学习笔记 一:thrift介绍 Thrift是facebook开发的用来处理各不同系统之间数据通讯的rpc服务框架,后来成为apche的开源项目.thrift支持多种程序语言,包括Java ...
- Thrift学习
Thrift学习 一:thrift介绍 Thrift是facebook开发的用来处理各不同系统之间数据通讯的rpc服务框架,后来成为apche的开源项目.thrift支持多种程序语言,包括Java,P ...
- Thrift学习记录
Thrift学习记录 Thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发.它结合了功能强大的软件堆栈和代码生成引擎,以构建在C++,Java,Python,PHP,Ruby,Erlang, ...
- RPC之Thrift学习实战
关于Thrift的学习实战请参考:http://blog.csdn.net/column/details/slimina-thrift.html
- rpc框架之 thrift 学习 2 - 基本概念
thrift的基本构架: 上图源自:http://jnb.ociweb.com/jnb/jnbJun2009.html 底层Underlying I/O以上的部分,都是由thrift编译器生成的代码, ...
- rpc框架之 thrift 学习 1 - 安装 及 hello world
thrift是一个facebook开源的高效RPC框架,其主要特点是跨语言及二进制高效传输(当然,除了二进制,也支持json等常用序列化机制),官网地址:http://thrift.apache.or ...
- Apache Thrift学习之二(基础及原理)
Apache Thrift 是 Facebook 实现的一种高效的.支持多种编程语言的远程服务调用的框架.本文将从 Java 开发人员角度详细介绍 Apache Thrift 的架构.开发和部署,并且 ...
- Apache Thrift学习之一(入门及Java实例演示)
目录: 概述 下载配置 基本概念 数据类型 服务端编码基本步骤 客户端编码基本步骤 数据传输协议 实例演示(java) thrift生成代码 实现接口Iface TSimpleServer服务模型 T ...
- 跨平台通信中间件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 ...
随机推荐
- python 虚拟环境操作 virtualenv +virtualenvwrapper
Window 下创建python的虚拟环境 下载工具 pip install virtualenv 创建虚拟环境目录 # 注意此命令创建的虚拟环境目录是在当前目录下 virtualenv testen ...
- Linux yum源完全配置
一.简介 yum主要功能是更方便的添加/删除/更新RPM包,自动解决包的依赖性问题,便于管理大量系统的更新问题,其理念是使用一个中心仓库(repository)管理一部分甚至一个distributio ...
- Python while for if....else
1函数input()的工作原理: 函数input()让程序暂停运行,等待用户输入一些文本.获取用户输入后,python将其存储在一个变量(即要向用户显示的提示或说明) raw_input 是Py ...
- [中英对照]Introduction to DPDK: Architecture and Principles | DPDK概论: 体系结构与实现原理
[中英对照]Introduction to DPDK: Architecture and Principles | DPDK概论: 体系结构与实现原理 Introduction to DPDK: ...
- poj_1979(dfs)
Red and Black There is a rectangular room, covered with square tiles. Each tile is colored either re ...
- linux 使用笔记6
---恢复内容开始--- 1.内容追加 把一个文件的内容追加到另一个文件中: cat first.txt >> second.txt//追加到second.txt文件的末端 cat ...
- 洛谷3119 [USACO15JAN]草鉴定Grass Cownoisseur
原题链接 显然一个强连通分量里所有草场都可以走到,所以先用\(tarjan\)找强连通并缩点. 对于缩点后的\(DAG\),先复制一张新图出来,然后对于原图中的每条边的终点向新图中该边对应的那条边的起 ...
- Hotspot参数分析
-XX:+HeapDumpOnOutOfMemoryError 让虚拟机在出现内存溢出异常时Dump出当前的内存堆转储快照以便事后进行分析 -Xmx与-Xms 虚拟机堆参数 -Xoss 设置本地方法栈 ...
- npm run build出问题十分通用的解决方法
1.C:\NanoFabric\52ABP\SPAHost\ClientApp\node_modules 原来的目录重命名为C:\NanoFabric\52ABP\SPAHost\ClientApp\ ...
- mongoDB(Linux)
启动 service mongod start 安装好后,输入mongo进入控制台 创建数据库 use baseName db.createCollection("game_record& ...