• RPC框架之Thrift


          目前流行的服务调用方式有很多种,例如基于SOAP消息格式的 Web Service,基于 JSON 消息格式的 RESTful 服务等。其中所用到的数据传输方式包括 XML,JSON 等,然而 XML 相对体积太大,传输效率低,JSON 体积较小,新颖,但还不够完善。

        Hessian是一款基于HTTP协议的RPC框架,采用的是二进制RPC协议,但是在JAVA中,Hessian的服务端需要使用Tomcat之类的容器,而它们的性能总是那么不如人意。

          本文将介绍由 Facebook 开发的远程服务调用框架 Apache Thrift,它采用接口描述语言定义并创建服务,支持可扩展的跨语言服务开发,所包含的代码生成引擎可以在多种语言中,如 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk 等创建高效的、无缝的服务,其传输数据采用二进制格式,相对 XML 和 JSON 体积更小,对于高并发、大数据量和多语言的环境更有优势。

         Thrift是为了解决Facebook各系统间大数据量的传输通信及系统之间语言环境不同需要跨平台的特性而产生的。

    一、数据类型

    Thrift 脚本可定义的数据类型包括以下几种类型:

    1、基本类型:

       (1)bool:布尔值,true 或 false,对应 Java 的 boolean

       (2)byte:8 位有符号整数,对应 Java 的 byte

       (3)i16:16 位有符号整数,对应 Java 的 short

       (4)i32:32 位有符号整数,对应 Java 的 int

       (5)i64:64 位有符号整数,对应 Java 的 long

       (6)double:64 位浮点数,对应 Java 的 double

       (7)string:未知编码文本或二进制字符串,对应 Java 的 String

    2、结构体类型:

        struct:定义公共的对象,类似于 C 语言中的结构体定义,在 Java 中是一个 JavaBean

    3、容器类型:

       (1)list:对应 Java 的 ArrayList

       (2)set:对应 Java 的 HashSet

       (3)map:对应 Java 的 HashMap

    4、异常类型:

         exception:对应 Java 的 Exception

    5、服务类型:

         service:对应服务的类

    二、协议

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

    1、TBinaryProtocol —— 二进制编码格式进行数据传输  

    使用方法:Factory proFactory = new TBinaryProtocol.Factory();

    2、TCompactProtocol —— 高效率的、密集的二进制编码格式进行数据传输  

    使用方法:构建 TCompactProtocol 协议的服务器和客户端只需将 TBinaryProtocol 协议部分即可,替换成如下代码:TCompactProtocol.Factory proFactory = new TCompactProtocol.Factory();

    3、TJSONProtocol —— 使用 JSON 的数据编码协议进行数据传输  

    构建 TJSONProtocol 协议的服务器和客户端只需将中 TBinaryProtocol 协议部分即可,替换成如下代码:TJSONProtocol.Factory proFactory = new TJSONProtocol.Factory();

    4、TSimpleJSONProtocol —— 只提供 JSON 只写的协议,适用于通过脚本语言解析

    三、传输方式

        常用的传输层有以下几种:

    1、TSocket —— 使用阻塞式 I/O 进行传输,是最常见的模式;

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

    3、TNonblockingTransport —— 使用非阻塞方式,用于构建异步客户端;

    四、服务端类型

    常见的服务端类型有以下几种:

    1、TSimpleServer —— 单线程服务器端使用标准的阻塞式 I/O;

    2、TThreadPoolServer —— 多线程服务器端使用标准的阻塞式 I/O;

    3、TNonblockingServer —— 多线程服务器端使用非阻塞式 I/O

    参见:https://www.ibm.com/developerworks/cn/java/j-lo-apachethrift/

              http://dongxicheng.org/search-engine/thrift-framework-intro/

        XXX.thrift文件中定义类一个service(ThriftCase),生成java代码之后将会变成一个接口,这些接口的作用是实现跨平台通信,但是真正的业务逻辑并未实现,所以,要做什么?怎么做?这些详细的设计应该由我们自己来实现。

    代码参见:http://blog.163.com/scuqifuguang@126/blog/static/171370086201362273929684

  • 相关阅读:
    C语言第三天,《常量指针和指针常量》
    树莓派系统烧入总结
    c 语言第一天
    7. Vue
    6. Vue
    5. Vue
    4. Vue
    3. Vue
    1. Vue
    2. Vue
  • 原文地址:https://www.cnblogs.com/moonandstar08/p/5158881.html
Copyright © 2020-2023  润新知