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 ...
随机推荐
- Charles基本使用
Charles使用 查找电脑IP,菜单选项helpàLocal IP Addresses 手机连接代理 手机打开WiFi,把代理模式设置为手动,设置主机名为Charles所在机器的ip,端口号为Cha ...
- opencv 双边模糊,膨胀腐蚀 开 闭操作
#include <opencv2/opencv.hpp> #include <iostream> using namespace cv; int main(int argc, ...
- kubadm创建k8s v1.10集群
kubadm创建k8s集群 1:服务器信息以及节点介绍 主机名 ip 备注 k8s-master 192.168.0.104 master etcd keepalived k8s-client1 19 ...
- (转)silverlight应用程序中未处理的错误代码:2104 类别:InitializeError
解决方案:第一步:默认网站--属性-----http头 第二步:点击mime类型: 第三步:点击新建: 第四步:输入扩展名以及类型: (1) 扩展名:.xaml MIME类型:applicat ...
- 单细胞RNA测序技术之入门指南
单细胞RNA测序技术之入门指南 [字体: 大 中 小 ] 时间:2018年09月12日 来源:生物通 编辑推荐: 在这个飞速发展的测序时代,DNA和RNA测序已经逐渐成为“实验室中的家常菜”.若要 ...
- LaTeX数学公式大全
原写于我的洛谷博客(传送门),现搬到这个博客上. 建议去洛谷博客上看,因为两边的编辑器在有些功能上不能通用,所以之后若有删改或新增内容只在洛谷博客上弄,这边就懒得改了. 原本是针对洛谷的编辑器,不过懒 ...
- SPring中quartz的配置(可以用实现邮件定时发送,任务定时执行,网站定时更新等)
http://www.cnblogs.com/kay/archive/2007/11/02/947372.html 邮件或任务多次发送或执行的问题: 1.<property name=" ...
- 乘积最大(NOIP2000&NOIP水题测试(2017082301))
题目链接:乘积最大 这道题显然是道区间dp. 难度不是很大. 思路也很清晰. 我们设计一个三维状态. ans[l][r][k] 这里表示在闭区间[l,r]上操作k次的最大值. 操作就是加乘号. 转移也 ...
- 经典矩阵快速幂之二-----hdu2157(走k步到
题意:(中问题,题意很简单 思路:a走k步到b,其实就是A^k,ans.mat[a][b]就是答案. 其实就是离散的邻接矩阵那个P(不想证明,逃 #include<cstdio> #inc ...
- PHP递归函数
递归函数(Recursive Function)是指直接或间接调用函数本身的函数 在每次调用自己时,必须是(在某种意义上)更接近 于解 必须有一个终止处理或计算的准则 function recursi ...