Thrift-java学习小结

原文出自【听云技术博客】:http://blog.tingyun.com/web/article/detail/1083

Thrift是什么?什么情况下使用thrift

Thrift源于大名鼎鼎的facebook之手,在2007年facebook提交Apache基金会将Thrift作为一个开源项目,对于当时的facebook来说创造thrift是为了解决facebook系统中各系统间大数据量的传输通信以及系统之间语言环境不同需要跨平台的特性。所以thrift可以支持多种程序语言,例如:  C++, C#, Cocoa, Erlang, Haskell, Java, Ocami, Perl, PHP, Python, Ruby, Smalltalk. 在多种不同的语言之间通信thrift可以作为二进制的高性能的通讯中间件,支持数据(对象)序列化和多种类型的RPC服务。Thrift是IDL(interface definition language)描述性语言的一个具体实现,Thrift适用于程序对程序静态的数据交换,需要先确定好他的数据结构,他是完全静态化的,当数据结构发生变化时,必须重新编辑IDL文件,代码生成,再编译载入的流程,跟其他IDL工具相比较可以视为是Thrift的弱项,Thrift适用于搭建大型数据交换及存储的通用工具,对于大型系统中的子系统间数据传输相对于JSON和xml无论在性能、传输大小上有明显的优势。

Thrift 基础架构

Thrift是一个服务端和客户端的架构体系,就是socket传输,Thrift 具有自己内部定义的传输协议规范(TProtocol)和传输数据标准(TTransports),通过IDL脚本对传输数据的数据结构(struct) 和传输数据的业务逻辑(service)根据不同的运行环境快速的构建相应的代码,并且通过自己内部的序列化机制对传输的数据进行简化和压缩提高高并发、 大型系统中数据交互的成本,下图描绘了Thrift的整体架构,分为6个部分:1.你的业务逻辑实现(You Code) 2.客户端和服务端对应的Service 3.执行读写操作的计算结果4.TProtocol 5.TTransports  6.底层I/O通信

Thrift脚本的数据类型

 * Base Types:基本类型

bool        Boolean, one byte

byte        Signed byte

i16         Signed 16-bit integer

i32         Signed 32-bit integer

i64         Signed 64-bit integer

double      64-bit floating point value

string      String

binary      Blob (byte array)

 * Struct:结构体类型

 * Container:容器类型,即List、Set、Map

map<t1,t2> Map from one type to another

list<t1>    Ordered list of one type

set<t1>     Set of unique elements of one type

 * Exception:异常类型

 * Service: 定义对象的接口,和一系列方法

协议

  Thrift可以让你选择客户端与服务端之间传输通信协议的类别,在传输协议上总体上划分为文本(text)和二进制(binary)传输协议, 为节约带宽,提供传输效率,一般情况下使用二进制类型的传输协议为多数,但有时会还是会使用基于文本类型的协议,这需要根据项目/产品中的实际需求:

    * TBinaryProtocol – 二进制编码格式进行数据传输。

    * TCompactProtocol – 这种协议非常有效的,使用Variable-Length Quantity (VLQ) 编码对数据进行压缩。

    * TJSONProtocol – 使用JSON的数据编码协议进行数据传输。

    * TSimpleJSONProtocol – 这种节约只提供JSON只写的协议,适用于通过脚本语言解析

    * TDebugProtocol – 在开发的过程中帮助开发人员调试用的,以文本的形式展现方便阅读。

传输层

    * TSocket- 使用堵塞式I/O进行传输,也是最常见的模式。

    * TFramedTransport- 使用非阻塞方式,按块的大小,进行传输,类似于Java中的NIO。

    * TFileTransport- 顾名思义按照文件的方式进程传输,虽然这种方式不提供Java的实现,但是实现起来非常简单。

    * TMemoryTransport- 使用内存I/O,就好比Java中的ByteArrayOutputStream实现。

    * TZlibTransport- 使用执行zlib压缩,不提供Java的实现。

服务端类型

    * TSimpleServer -  单线程服务器端使用标准的堵塞式I/O。

    * TThreadPoolServer -  多线程服务器端使用标准的堵塞式I/O。

    * TNonblockingServer – 多线程服务器端使用非堵塞式I/O,并且实现了Java中的NIO通道。

Thrift构建步骤总结(参考实例1)

1 、下载thrift.exe

到thrift官网下载,这里我用的是0.9.3版本

http://thrift.apache.org/

2、将exe放到C:\Windows下(重命名为thrift.exe)

3、C:\Windows创建.thrift文件,编写ThriftServer.thrift代码

4、在目录下执行thrift.exe -r -gen java ./ThriftServer.thrift;执行成功后看到在该目录下生成了gen-java文件夹,在该文件夹中生成了IThriftServer.java;

5、将IThriftServer.java拷贝到server端,进行后续编写即可。

6、如果client和server端是跨应用,那么需要server端先编译打包成jar,将这个jar添加到client端的依赖中。

时间: 2024-12-03 13:51:45

Thrift-java学习小结的相关文章

点滴的积累---J2SE学习小结

点滴的积累---J2SE学习小结         什么是J2SE         J2SE就是Java2的标准版,主要用于桌面应用软件的编程:包含那些构成Java语言核心的类.比如:数据库连接.接口定义.输入/输出.网络编程.         学习感受         近半个月的坎坷,总算是将马士兵的<J2SE教程>视频看完了,期间一些其他的事一些不得不处理的事总是打断我的安排.看了视频之后觉得东西确实都很基础给我印象最深的是关于程序运行的内存分析.IO和线程,这谁在之前无论是学习VB.VB.

Java学习之Java的运行环境

Java 时下已经非常流行.全球每天有超过百万的程序员在用Java进行着程序的开发.用Java编写的程序也因为其硬件环境无关性而越来越受到人们的青睐.如果您希望成为Java世界的一员,那就看看这个系列的文章也许对您会有帮助. 无论哪种语言都需要有它特定的运行环境也就是平台,Java 同样不例外.您也许会问,Java程序不是有硬件环境无关性吗?好吧,我希望这篇文章可以回答好这个问题. 几乎所有的语言都是需要通过编译或者解释才可以被您的电脑执行.可是Java有一点不同,它同时需要这两个过程.其实,也

JAVA学习,是一条漫长的道路(转贴)

作者:蔡学镛  发表日期:2001-08-13  浏览人次 :378    我在Java 1.0正式问世前就开始学习Java,这么多年过去了,到现在我的Java学习历程还没有停过.我阅读原文书,研究原始码,撰写程序,自认为走得扎实,不奢望一步登天.像我这样老式的学习方式,显然和现在的快餐主义背道而驰.从许多读者的来信和学生的反应中,我发现大多数的人对于Java的学习历程都差不多是:因为公司需要使用Java来进行服务器的计画,所以急急忙忙地学习Java语言,然后就开始使用J2EE的API,开始写起

Java学习从入门到精通

Java学习从入门到精通工具篇一. JDK (Java Development Kit) JDK是整个Java的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具和Java基础的类库(rt.jar).不论什么Java应用服务器实质都是内置了某个版本的JDK.因此掌握JDK是学好Java的第一步.最主流的JDK是Sun公司发布的JDK,除了Sun之外,还有很多公司和组织都开发了自己的JDK,例如IBM公司开发的JDK,BEA公司的Jrocket,还有G

node.js操作mongodb学习小结

  node.js操作mongodb学习小结          这篇文章主要介绍了node.js操作mongodb学习小结,本文给出了mongodb创建数据库.插入数据以及连接mongodb数据库并查询数据等代码实例,需要的朋友可以参考下 一.准备工作 1.在mongodb创建将要读取的表 创建数据库mongotest 代码如下: use mongotest; 向user表中插入数据 代码如下: db.user.insert({ name:'flyoung', age:'18', sex:tru

Java学习路线图,专为新手定制的学习计划建议

怎么学习Java,这是很多新手经常会问我的问题,现在我简单描述下一个Java初学者到就业要学到的一些东西: 首先要明白Java体系设计到得三个方面:J2SE,J2EE,J2ME(KJAVA). J2SE,Java 2 Platform Standard Edition,我们经常说到的JDK,就主要指的这个,它是三者的基础,属于桌面级应用开发,这部分如果学得好很容易拓展J2EE和J2ME. J2ME,The Micro Edition of the Java 2 Platform.主要用于嵌入式J

【Java学习路线图,看你掌握了多少】附全部知识点免费视频课程,名师主讲

这个路线图中包含了Java学习的三部曲: Java零基础入门(点击标题学习) Java面向对象开发(点击标题学习) Java高级开发(点击标题学习) 在阿里云大学,你可以跟随Java名师李兴华学到路线图中所有的知识点(完全免费哦),赶快开始你的Java学习之路吧! 课程详细目录: Java零基础入门 课时1:Java简介(Java发展概述) 课时2:Java简介(Java主要特点) 课时3:JDK的安装与配置 课时4:第一个Java程序 课时5:CLASSPATH环境属性 课时6:Java程序基

python 正则表达式学习小结

在Python中实现正则的方式是通过re(regular expression的缩写)模块来实现的,你可以调用re模块的各种方法来实现不同的功能,下面我们就来说下,在Python中通过re模块可以调用那些方法,以及这些方法的作用都是什么:还有就是正则的实例以及各种特殊符号的含义: 1.re.sub和replace: sub的全拼是substitute,也就是替换的意思:既然知道是替换了,那就很容易用到实例中了,其实replace也是替换的意思,只不过它们的用法不太相同,下面用一个例子来详细说明下

java学习,方向j2ee,android需要看的书籍

问题描述 java学习,方向j2ee,android需要看的书籍 大四,现在处于实习阶段!计算机专业,想从事java语言开发,学习的过程中,望前辈指点,注意些什么,该看些什么书籍!!! 解决方案 首先要掌握大学里学习的相关知识,例如 计算机网络,计算机操作系统,数据结构等等,这些基础知识很重要. 其次,如果要从事java开发的相关工作,推荐看以下书籍; thinking in java ,effective java 有了一定工作经验以后可以查一些设计模式相关的书,一些in action系列的书