`
goofyan
  • 浏览: 15015 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

使用thrift执行跨语言的远程过程调用

阅读更多
    thrift是个跨语言的远程过程调用(RPC)服务,支持client和server以多种语言通讯。
    可以在源代码lib/java中获得jar包。代码、接口示例可参考thrift源代码中的tutorial/tutorial.thrift,tutorial/java。使用:
    一、定义接口IDL:xxx.thrift。支持的数据类型有:bool;byte: 有符号字节;i16: 16位有符号整型;i32: 32位有符号整型;i64: 64位有符号整型;double: 64位浮点型;string。其他类型有list、set、map、struct、exception、enum等。包用namespace/include声明/调用(类似c++)。服务接口用service声明,其中声明多个接口。
namespace java com.thrift.test.user //需要指定语言,否则生成代码报错。
struct User { //不支持继承
    1: required i32 id;   //每个域都有一个唯一数字标签,这些数字标签在传输时用来确定域
    2: required string name; 
}
service UserService {
i32 getId(1: User user);
void setName(1: User user, 2: string s);
}
参考:http://www.cnblogs.com/tianhuilove/archive/2011/09/05/2167669.html
    二、通过thrift.exe,将IDL生成为代码,如thrift.exe -r -gen java test.thrift(-r对其中include的文件也生成服务代码)。生成的类有2个,User.java和UserService.java,分别对应结构体和服务。若有多个结构体或多个服务,就会生成多个对应的类。除此之外,若接口中定义了const常量,还会生成一个xxxConstants类。
    在User.java中IDL结构体的域对应为_Fields,是一个enum型,这也就理解了定义中域的数字标签的意义,可以根据数字标签找到相应的域
public static _Fields findByThriftId(int fieldId) {
      switch(fieldId) {
        case 1: // ID
          return ID;
        case 2: // NAME
          return NAME;
        default:
          return null;
      }
    }
另外,在该类中还提供了与的get/set、比较、toString、序列化以及read/write等操作
    在UserService类中定义了Iface、AsyncIface接口以及client、AsyncClient、Processor、AsyncProcessor等类,其中有对接口方法的send_xxx,recv_xxx等操作,不需要动这个类。
    三、自定义服务处理类UserHandler实现UserService.Iface/AsyncIface接口。其中对服务方法进行具体处理。
    四、构建服务端监听方法。
public static void server() {
    try {
      Calculator.Processor processor = new UserService.Processor(new UserHandler());
      TServerTransport serverTransport = new TServerSocket(9090);
      TServer server = new TSimpleServer(new Args(serverTransport).processor(processor));
      // Use this for a multithreaded server
      // TServer server = new TThreadPoolServer(new TThreadPoolServer.Args(serverTransport).processor(processor));
      server.serve();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

    五、构建客户端请求方法。
public static void main(String [] args) {
    try {
      TTransport transport = new TSocket("xxxx", 9090);
      transport.open();
      TProtocol protocol = new  TBinaryProtocol(transport);
      UserService.Client client = new UserService.Client(protocol);
      perform(client); //调用接口提供的服务
      transport.close();
    } catch (TException x) {
      x.printStackTrace();
    } 
  }

   
分享到:
评论

相关推荐

    Thrift之QT远程调用(银河麒麟高级服务器版V10操作系统)

    在IT行业中,Thrift是一种高性能、可扩展的跨语言服务开发框架,主要用于构建分布式系统中的应用程序接口(API)。它的核心是定义了一种中间语言(IDL,Interface Definition Language),允许开发者在不同的编程...

    基于thrift的RPC调用实例

    RPC(远程过程调用)是一种在分布式系统中执行远程计算的方法,使得客户端可以在不理解远程服务器内部实现的情况下,像调用本地函数一样调用远程服务器上的服务。在本实例中,我们将关注一个基于Thrift的RPC调用实现...

    Apache Thrift——可伸缩的跨语言服务开发框架

    Apache Thrift——可伸缩的跨语言服务开发框架 Apache Thrift 是 Facebook 实现的一种高效的、支持多种编程...Apache Thrift 是一种功能强大且灵活的跨语言服务开发框架,适合开发高效的、可扩展的远程服务调用应用。

    【Thrift之C++远程调用helloworld菜鸟教程】

    这个"Thrift之C++远程调用helloworld菜鸟教程"将引导初学者一步步完成从定义服务接口到编写服务器和客户端代码的过程,从而理解Thrift在C++中的工作原理和使用方法。通过实践这个教程,开发者可以更好地掌握RPC通信...

    rfc1050中文版............远程过程调用协议规范 .rar

    RPC的核心思想是提供一种透明的方式,使得本地调用函数与远程调用函数在编程体验上无明显差异。调用者只需指定要调用的远程过程及其参数,RPC框架负责处理网络通信和数据转换,返回结果给调用者。 ### 2. RPC的组成...

    Thrift简单调用demo代码

    它的核心是定义了一种IDL(接口定义语言),允许开发者以一种声明式的方式定义服务,并能自动生成多种编程语言的客户端和服务端代码,实现高效、轻量级的RPC(远程过程调用)。 在"Thrift简单调用demo代码"中,我们...

    RPC(远程过程调用)

    - Thrift:Facebook开发的跨语言服务框架,定义了一种IDL(接口定义语言)。 - Dubbo:阿里巴巴开源的Java RPC框架,专注于高性能、轻量级的远程服务调用。 - SOAP(简单对象访问协议):一种基于XML的早期RPC...

    Thrift在PHP中简单使用示例--远程服务调用框架

    Apache Thrift是一个强大的开源框架,它允许开发人员在多种编程语言之间进行高效的远程过程调用(RPC)。这个框架最初由Facebook开发,后来捐赠给了Apache软件基金会。Thrift的主要目标是解决多语言通信的问题,使...

    老版本thrift 执行程序

    Thrift是一种开源的跨语言服务开发框架,由Facebook于2007年创建,并于2008年贡献给了Apache软件基金会。它被设计用来构建高效、可扩展的分布式服务,通过定义服务接口和数据类型,可以自动生成各种编程语言的客户端...

    thrift总结 - 跨语言服务开发

    在本篇文章中,我们将深入探讨Thrift的核心概念、工作原理以及如何使用它进行跨语言服务开发。 1. **Thrift IDL** Thrift IDL(Interface Definition Language)类似于XML或protobuf,用于定义服务接口、数据结构...

    基于Thrift的Golang与c#程序互相访问

    Thrift是一种“远程过程调用”(RPC)框架,它提供了一种轻量级的编译器,可以将接口定义语言(IDL)转换为多种编程语言的代码。通过这种方式,不同语言的客户端和服务端能够通过一个统一的接口进行通信,而无需关心...

    Thrift RPC客户端的服务化框架代码

    Thrift RPC客户端的服务化框架代码主要涉及了两个关键概念:Thrift和RPC(Remote Procedure Call,远程过程调用)。Thrift是由Facebook开发的一种开源跨语言服务框架,它允许定义数据类型和服务接口,然后自动生成...

    qt 实现thrift的一个例子

    在这个例子中,我们将探讨如何使用Qt来实现一个基于Thrift的C++客户端和服务端的RPC(远程过程调用)连接。 首先,Thrift IDL文件(.thrift)是整个服务的核心,它定义了服务接口和数据结构。例如,我们可能会有一...

    rpc远程调用使用说明&源码

    3. **Thrift**:Facebook开发的跨语言服务开发框架,使用IDL定义接口,生成多语言的客户端和服务端代码。 4. **Spring Cloud Netflix Feign**:基于Java的声明式Web服务客户端,与Spring Cloud整合,简化了HTTP...

    Thrift-java学习小结

    Thrift是一种远程过程调用(RPC)框架,它通过定义一种中间描述文件(.thrift),可以生成多种编程语言的代码,如Java、Python、C++等。这种跨语言的能力使得开发多语言服务变得简单,同时Thrift还提供了一种轻量级...

    rpc远程调用

    3. **Thrift**:Facebook开源的跨语言服务开发框架,使用IDL定义接口和服务,支持多种语言。 4. **Spring Cloud OpenFeign**:基于Feign的声明式Web服务客户端,集成于Spring Cloud生态中。 5. **Apache Axis**:...

    Apache Thrift 使用说明

    Thrift 提供了一个集成的代码生成工具,允许开发者定义数据类型和服务接口,然后自动生成多种编程语言(如 C++ 和 Java)的客户端和服务器端代码,实现高效、可靠的远程过程调用(RPC)。 在 Ubuntu 系统下安装 ...

Global site tag (gtag.js) - Google Analytics