zoukankan      html  css  js  c++  java
  • [转]thrift系列

    原文: 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: est hriftin"(你想移到哪儿你随意) 这个文件夹下。

    3.定义接口文件

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

    [plain] view plain copy
     
    1. namespace java test.thrift_test  
    2.   
    3. service TestService {  
    4.   string getStruct(1: i32 num,2: string name)  
    5. }  

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

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

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

    5.搭建maven环境

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

    [html] view plain copy
     
    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接口:

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

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

         以下是Server端的示例代码:

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

          

            以下是Client端的示例代码:

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


                 启动的时候,先运行 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.

  • 相关阅读:
    获取UltraWebTree指定节点的所有父节点内容
    OnClientClick
    ListControl控件经典用法
    DataTable添加列时容易被忽略的问题!
    利用数据库来填充UltraWebTree
    Web导出Word需要添加头文件
    程序中添加动态用户密码
    重构oninit,应用在模式窗口的方法
    防SQL注入
    获得connect string简单方法
  • 原文地址:https://www.cnblogs.com/oxspirt/p/8464236.html
Copyright © 2011-2022 走看看