《Netty学习打卡--从小白到放弃》----- 12 - netty 之thrift 初识thrift

打卡日期(2019-07-11)

学习要点

-   1.Thrift是什么
-   2.Thrift架构
-   3.Thrift能做什么
-   4.TProtocol
-   5.Thrift TTransPort
-   6.Thrift支持哪几种Server模型
-   7.Thrift IDL文件有哪几种基本数据类型
-   8.Thrift 支持哪几种容器
-   9.Thrift 关键字

1.Thrift是什么?

    Thrift是一个软件框架,用于可扩展、跨语言的服务开发。拥有强大软件堆栈和代码生成引擎,在Thrift框架内能够为多种语言提供无缝且高效的服务。

2.Thrift架构

在这里插入图片描述

    Thrift的架构也是由客户端(Client)、客户端辅助对象(Stub\Sklenton)、传输协议(TProtocol)、传输层(TTransport)

  • Client:负责实现业务,组装请求参数
  • YourCode/FooService.Client:客户端辅助对象Stub或者Sklenton,负责调用远程服务接口
  • TProtocol:负责序列化和反序列化消息,然后将消息写入到网络传输层
  • TTransport:负责提供传输数据

3.Thrift能做什么

    Thrift主要用于跨语言、不同服务之间的PRC通信。Thrift是一个典型的CS结构,客户端和服务端可以使用不同的语言进行开发,其通过IDL(Interface Description Language)来关联客户端和服务端。

4.Thrift TProtocol

    TProtocol中封装了每一个数据类型的读和写,这里针对的主要是网络的IO读写,TProtocol是一个抽象类且内部维护了一个TTransport,这个协议主要用于对传输数据格式进行封装,实现不同的协议来适应不同的数据传输。其包括如下几种格式:

  • TJSONProtocol:以json的格式读写数据
  • TSimpleJSONProtocol:json格式的简单读,没有提供写的功能
  • TBinaryProtocol:以二进制的格式进行读写
  • TCompactProtocol:对数据进行压缩,采用zigzag进行编码,它会沿着构造函数传入protocol部分输出/读取格式,但会对数据进行压缩

5.Thrift TTransPort

    TTransport封装了底层的传输通道,主要有read/write、open/close等基本的读写方法,而且都是对二进制数据进行操作。Protocol则对thrift中的各种数据进行读写,底层调用的是TTransport。TTransport的分为如下几种格式:

  • TIOStreamTransport:阻塞式socket
  • TNonblockingTrasnsort:非阻塞式IO
  • TMemoryInputTransport:封装了一个byte数组来作为输入流的的封装
  • TFramedTransport:封装了TMemoryInputTransport做输入流,封装了TByteArryOutPutStream做输出流,作为内存读写缓冲区的一个封装,调用flush方法时候,会先写入4个字节的输出流作为消息头,然后再写消息体。
  • TMemoryBuffer:使用字节数组输出流ByteArrayOutputStream做输出流的封装。
  • TFastFramedTransport是内存利用率更高的一种内存读写缓存区,它使用自增长byte数组,而不是每次都new出来一个byte数组,提高了内存的使用率。跟TFramedTransport一样,每次flush的时候都会先写入4个字节作为消息头,然后再写消息体。

6.Thrift支持哪几种Server模型

    一个服务是由一组命名的函数组成,包括函数名,参数列表,返回值。thrift主要支持以下几种服务模型:

  • TSimpleServer:简单的单线程服务,通常用于测试
  • TThreadPoolServer:多线程服务,使用标准的阻塞式IO
  • TNonBlockingServer:多线程服务,使用标准的非阻塞式IO(需要使用TFramedTranspor数据传输方式)
  • THsHaServer:THSHa 其模型任务读写放到线程池里面去处理,Half-async/Half-sync处理模式,Half-async是处理IO事件上(accept/read/write),Half-sync是用于handler对RPC的同步处理

7.Thrift IDL文件有哪几种基本数据类型

  • byte:有符号字节
  • i16:16位有符号整数
  • i32:32位有符号整数
  • i64:64位有符号整数
  • double:64位浮点型
  • string:字符串
  • binary:Blob类型,对应java中的byte[]
  • bool:布尔类型

8.Thrift 支持哪几种容器

    thrift容器是强类型容器,对应大多数的编程语言中常用的容器类型

  • list:按顺序排序的元素列表,会转换成java中的ArrayList类型
  • set:无需的唯一元素集合,会转换成java中的HashSet
  • map:用唯一的键来映射值,一个字典结构,Key为K类型,Value为V类型,会转成java中的HashMap

猜你喜欢

转载自blog.csdn.net/u011291990/article/details/95484698