聊聊Thrift(一) 基础

聊聊Thrift(一) 基础

什么是Thrift

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

Thrift架构

thrift架构图见下:
这里写图片描述
图中黄色部分是用户实现的业务逻辑,褐色部分是根据 Thrift 定义的服务接口描述文件生成的客户端和服务器端代码框架,红色部分是根据 Thrift 文件生成代码实现数据的读写操作。红色部分以下是 Thrift 的传输体系、协议以及底层 I/O 通信,使用 Thrift 可以很方便的定义一个服务并且选择不同的传输协议和传输层而不用重新生成代码。

Thrift数据类型

  • 基本类型
    bool:布尔值,true 或 false,对应 Java 的 boolean
    byte:8 位有符号整数,对应 Java 的 byte
    i16:16 位有符号整数,对应 Java 的 short
    i32:32 位有符号整数,对应 Java 的 int
    i64:64 位有符号整数,对应 Java 的 long
    double:64 位浮点数,对应 Java 的 double
    string:未知编码文本或二进制字符串,对应 Java 的 String

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

  • 容器类型
    list:对应 Java 的 ArrayList
    set:对应 Java 的 HashSet
    map:对应 Java 的 HashMap
  • 异常类型
    exception:对应 Java 的 Exception
  • 服务类型
    service:对应服务的类

Thrift协议

Thrift 可以让用户选择客户端与服务端之间传输通信协议的类别,在传输协议上总体划分为文本 (text) 和二进制 (binary) 传输协议,为节约带宽,提高传输效率,一般情况下使用二进制类型的传输协议为多数,有时还会使用基于文本类型的协议,这需要根据项目 / 产品中的实际需求。常用协议有以下几种:
- TBinaryProtocol —— 二进制编码格式进行数据传输
- TCompactProtocol —— 高效率的、密集的二进制编码格式进行数据传输
- TJSONProtocol —— 使用 JSON 的数据编码协议进行数据传输
- TSimpleJSONProtocol —— 只提供 JSON 只写的协议,适用于通过脚本语言解析

Thrift传输层

  • TSocket —— 使用阻塞式 I/O 进行传输,是最常见的模式
  • TNonblockingTransport —— 使用非阻塞方式,用于构建异步客户端

Thrift服务端类型

  • TThreadPoolServer 阻塞线程池模式
  • TNonblockingServer 非阻塞模式
  • TThreadedSelectorServer 非阻塞高级模式

Thrift使用 java版本

  • 编写IDL文件,如demo.thrift
  • 编写自定义数据类型文件,如thrift.datatype.thrift
  • 编译Thrift服务接口文件
  • 编写服务器端的java代码,实现thrift服务端的接口
  • 编写客户端的java代码,实现RPC调用和业务逻辑

上面为thrift的相关内容,后面会针对3中服务端的模式进行进一步讲解

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值