原文: http://blog.csdn.net/hrn1216/article/details/51274934

thrift 介绍,入门例子。 thrift 是一个RPC框架,实现跨语言

---------------------------------------------------------------------------------------------------------------------------

1.简介
           Thrift是当前流行的RPC框架之一,它有强大的代码生成引擎,可以跨语言,轻松解决程序间的通信问题。

本文旨在帮助大家快速入门,若想深入原理,请参见thrift官网:http://thrift.apache.org/。(大家都很忙,少说废话)

2.下载windows版的IDL compiler

访问地址:http://www.apache.org/dyn/closer.cgi?path=/thrift/0.9.3/thrift-0.9.3.exe,在打开的页面中,任选一个资源下载。
      下载完成后,假设我把thrift-0.9.3.exe文件移到"F:\test\thrift\bin"(你想移到哪儿你随意) 这个文件夹下。

3.定义接口文件

新建一个名为test.thrift的文件。以下是该文件里的内容:

  1. namespace java test.thrift_test
  2. service TestService {
  3. string getStruct(1: i32 num,2: string name)
  4. }

这就是一个很简单的接口文件。thrift的引擎(此处你可以理解为thrift-0.9.3.exe),就要利用test.thrift生成你指定的语言的代码。这个接口有两个参数,一个是32位的整数,一个是一个字符串,返回值的类型也是一个字符串。关于接口文件定义的方式,请参见下一篇文章《thrift类型定义》。

4.利用接口文件生成代码

打开windows的命令行(这个你不要问我)。切换到"F:\test\thrift\bin"(第2步的时候说过)
     使用命令:thrift-0.9.3.exe -r --gen java test.thrift
     打开"F:\test\thrift\bin"这个目录,你会发现有一个名为"gen-java"的文件夹,该文件夹下就是生成的java代码。

5.搭建maven环境

利用你的Java IDE构建一个maven工程。这里是pom.xml中需要添加的内容:

  1. <dependency>
  2. <groupId>org.apache.thrift</groupId>
  3. <artifactId>libthrift</artifactId>
  4. <version>0.9.3</version>
  5. </dependency>

这里面有thrift运行时所需要的所有依赖jar。

注意,请把gen-java文件夹下的代码粘贴到工程中去!

6.java版demo

首先把首先实现TestService接口:

  1. package test.thrift_test;
  2. import org.apache.thrift.TException;
  3. import test.thrift_test.TestService.Iface;
  4. //我们定义的test.thrift的接口的具体实现
  5. class TestServiceHandler implements Iface{
  6. public String getStruct(int num, String name) throws TException {
  7. return name + num;
  8. }
  9. }

Thrift是CS的通信方式,即有一个server端,和一个client端。

以下是Server端的示例代码:

  1. package test.thrift_test;
  2. import org.apache.thrift.server.TServer;
  3. import org.apache.thrift.server.TServer.Args;
  4. import org.apache.thrift.server.TSimpleServer;
  5. import org.apache.thrift.transport.TServerSocket;
  6. import org.apache.thrift.transport.TServerTransport;
  7. import org.apache.thrift.transport.TTransportException;
  8. public class Server
  9. {
  10. public static void main( String[] args ){
  11. try {
  12. TestService.Processor processor = new TestService.Processor(new TestServiceHandler());
  13. TServerTransport serverTransport = new TServerSocket(9090);
  14. TServer server = new TSimpleServer(new Args(serverTransport).processor(processor));
  15. server.serve();
  16. } catch (TTransportException e) {
  17. e.printStackTrace();
  18. }
  19. }
  20. }

以下是Client端的示例代码:

  1. package test.thrift_test;
  2. import org.apache.thrift.TException;
  3. import org.apache.thrift.protocol.TBinaryProtocol;
  4. import org.apache.thrift.protocol.TProtocol;
  5. import org.apache.thrift.transport.TSocket;
  6. import org.apache.thrift.transport.TTransport;
  7. import org.apache.thrift.transport.TTransportException;
  8. public class Client {
  9. public static void main(String[] args) {
  10. TTransport transport = new TSocket("localhost", 9090);
  11. try {
  12. transport.open();
  13. TProtocol protocol = new TBinaryProtocol(transport);
  14. TestService.Client client = new TestService.Client(protocol);
  15. String result = client.getStruct(123, "test");
  16. System.out.println(result);
  17. transport.close();
  18. } catch (TTransportException e) {
  19. e.printStackTrace();
  20. } catch (TException e) {
  21. e.printStackTrace();
  22. }
  23. }
  24. }

启动的时候,先运行 Server.java,再运行Client.java。正常情况下,控制台输出结果为:test123

本文内容参考如下:

【1】http://thrift.apache.org/

注意:
        如您发现本文档中有明显错误的地方,
        或者您发现本文档中引用了他人的资料而未进行说明时,请联系我进行更正。
        转载或使用本文档时,请作醒目说明。
        必要时请联系作者,否则将追究相应的法律责任。

note:
        If you find this document with any error ,
        Or if you find any illegal citations , please contact me correct.
        Reprint or use of this document,Please explain for striking. 
        Please contact the author if necessary, or they will pursue the corresponding legal responsibility.

[转]thrift系列 - 快速入门的更多相关文章

  1. thrift系列 - 快速入门

    1.简介           Thrift是当前流行的RPC框架之一,它有强大的代码生成引擎,可以跨语言,轻松解决程序间的通信问题. 本文旨在帮助大家快速入门,若想深入原理,请参见thrift官网:h ...

  2. 懂一点Python系列——快速入门

    本文面相有 一定编程基础 的朋友学习,所以略过了 环境安装.IDE 搭建 等一系列简单繁琐的事情. 一.Python 简介 Python 英文原意为 "蟒蛇",直到 1989 年荷 ...

  3. Thrift框架快速入门

    Thrift介绍1.什么是thrift?thrift早期由facebook内部团队开发,主要用于实现跨语言间的方法调用,属于远程方法调用的一种,后开源纳入apache中,成为了apache thrif ...

  4. Elasticsearch快速入门案例

    写在前面的话:读书破万卷,编码如有神-------------------------------------------------------------------- 参考内容: <Ela ...

  5. [你必须知道的NOSQL系列]专题二:Redis快速入门

    一.前言 在前一篇博文介绍了MongoDB基本操作,本来打算这篇博文继续介绍MongoDB的相关内容的,例如索引,主从备份等内容的,但是发现这些内容都可以通过官方文档都可以看到,并且都非常详细,所以这 ...

  6. [你必须知道的NOSQL系列]专题一:MongoDB快速入门

    一.前言 现在越来越多的公司开始采用非关系数据库了,并且很多公司的面试都要求面试者有MongoDB的使用经验,至于非关系数据库与关系型数据库之间的区别大家可以自行百度.但是作为程序员的我们,既然大部分 ...

  7. 快速入门系列--WebAPI--01基础

    ASP.NET MVC和WebAPI已经是.NET Web部分的主流,刚开始时两个公用同一个管道,之后为了更加的轻量化(WebAPI是对WCF Restful的轻量化),WebAPI使用了新的管道,因 ...

  8. 快速入门系列--WebAPI--03框架你值得拥有

    接下来进入的是俺在ASP.NET学习中最重要的WebAPI部分,在现在流行的互联网场景下,WebAPI可以和HTML5.单页应用程序SPA等技术和理念很好的结合在一起.所谓ASP.NET WebAPI ...

  9. 快速入门系列--WebAPI--04在老版本MVC4下的调整

    WebAPI是建立在MVC和WCF的基础上的,原来微软老是喜欢封装的很多,这次终于愿意将http编程模型的相关细节暴露给我们了.在之前的介绍中,基本上都基于.NET 4.5之后版本,其System.N ...

随机推荐

  1. Python3简明教程(十)—— 异常

    在本节我们学习 Python 的异常以及如何在你的代码中处理它们. 异常 在程序执行过程中发生的任何错误都是异常.每个异常显示一些相关的错误信息,比如你在 Python3 中使用 Python2 独有 ...

  2. DoveCLL and Resistance(湖北省赛)

    题目 构造一个由串联和并联构成的纯电阻电路,使得该电路的等效电阻为p/q,其中(p,q) = 1.要求输出n,表示节点数,m表示电阻个数,m行每行ui,vi,wi,表示ui和vi之间要连上一个电阻为w ...

  3. uva12265 Selling Land

    见紫书.(c,h)的更新策略://前面的高度为0了,直接插入因为ans==-c+h,c大,h还小,那么肯定不是最优左上角,更新新加入列的列//新的一列高度最小,就删掉了其他的,只留这个高度从上到下,从 ...

  4. vscode vue template 下 style 的样式自动提示 #bug 这个搞完vue语法esLint就又不好使了,ERR

    网上都是 "*.vue": "vue",改成"*.vue": "html" 就ok了   "files.ass ...

  5. 【转】《windows核心编程》读书笔记

    这篇笔记是我在读<Windows核心编程>第5版时做的记录和总结(部分章节是第4版的书),没有摘抄原句,包含了很多我个人的思考和对实现的推断,因此不少条款和Windows实际机制可能有出入 ...

  6. 第 6 章 Cinder - 061 - Boot from Volume

    Boot from Volume Volume 除了可以用作 instance 的数据盘,也可以作为启动盘(Bootable Volume). 打开 instance 的 launch 操作界面. 这 ...

  7. ICPC-Beijing 2006 狼抓兔子

    题目描述 题解: 裸的最小割. 但是最大流跑不过去怎么办? 转变一下,既然最大流是一条左下<->右上的通路,我们可以把图划分为若干区域, 最后找左下到右上的最短路就行了. 代码: #inc ...

  8. 数据结构实验6:C++实现二叉树类

    实验6 学号:     姓名:      专业:   6.1 实验目的 掌握二叉树的动态链表存储结构及表示. 掌握二叉树的三种遍历算法(递归和非递归两类). 运用二叉树三种遍历的方法求解有关问题. 6 ...

  9. MyISAM和InnoDB索引实现对比

    MyISAM索引实现 MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址.如图:  这里设表一共有三列,假设我们以Col1为主键,则上图是一个MyISAM表的主索引 ...

  10. Couchbase IV(管理与维护)

    Couchbase IV(管理与维护) 管理 常用命令 Command Description server-list List all servers in a cluster server-inf ...