原文: 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.

最新文章

  1. web 项目 连接mycat 读写分离失效问题,
  2. [ACM] poj 2456 Aggressive cows (二分查找)
  3. html中的图片直接使用字符串代替
  4. 【转载】存储scale-up和scalce-out架构
  5. 10.PHP内核探索:Apache运行与钩子函数
  6. UML类图新手入门级介绍
  7. A Tour of Go Pointers
  8. 398. Random Pick Index
  9. (一)Windows下搭建PHP开发环境及相关注意事项
  10. phpcms 2008和discuz X3.1实现同步登陆退出论坛(已实现)
  11. ConcurrentQueue对列的基本使用方式
  12. GWT工程 —— HostedMode(宿主模式下调试) 所有的运行命令
  13. 关于Visual Studio未能加载各种Package包的解决
  14. ETL开发面试问题加吐槽加职业发展建议
  15. [随笔] 简单操作解决Google chrome颜色显示不正常的情况
  16. TripleDES加密解密
  17. druid数据源连接oracle10g报错:not support oracle driver 1.0
  18. 调皮的程序员:Linux之父雕刻在Linux内核中的故事
  19. Linux下C语言连接MySQL
  20. Android Studio 创建不同分辨率的图标

热门文章

  1. 请简述HTML和XHTML最重要的4点不同?
  2. 并发3-Volatile
  3. Android典型界面设计-访网易新闻实现双导航tab切换
  4. vue项目中设置跨域
  5. 【POJ 1061】青蛙的约会(EXGCD)
  6. Python利用flask sqlalchemy实现分页效果
  7. 【Codeforces 1107D】Compression
  8. luogu3157 [CQOI2011]动态逆序对
  9. Couchbase V(管理任务)
  10. ms sqlserver数据库建索引