thrift的架构主要如下,
+-------------------------------------------+
| Server (单线程、事件驱动等) |
+-------------------------------------------+
| Processor(由编译器生成) |
+-------------------------------------------+
| Protocol(JSON, 压缩等形式) |
+-------------------------------------------+
| Transport(TCP, HTTP 等) |
+-------------------------------------------+

传输(Transport)

该层简单抽象了向网络读和写的操作。该层暴露了open、close、read、write、flush接口。在server端会使用ServerTransport对原始类型数据进行接收包含listen、accept、close接口。
Transport主要有

  • TFileTransport – 以文件形式进行传输。
  • TMemoryInputTransport – 将内存用于I/O
  • TSocket -阻塞式socket
  • TNonblockingSocket -用于异步client的非阻塞式transport

协议(Protocol)

该层主要进行数据序列化和反序列化其中包含JSON、XML、文本、压缩格式

  • TBinaryProtocol – 二进制格式.
  • TCompactProtocol – 压缩格式
  • TJSONProtocol – JSON格式
  • TSimpleJSONProtocol –提供JSON只写协议, 生成的文件很容易通过脚本语言解析。
  • TDebugProtocol – 使用易懂的可读的文本格式,以便于debug
  • TCompactProtocol -实现THRIFT-110的协议

进程(Processor)

该层封装了从inputstream读和outputstream写的功能。该层只有一个方法TProcessor.process(TProtocol in, TProtocol out)。它是thrift编译器自动生成的。其参数in是用于从网络读取数据,out是用于向网络写数据。

服务(Server)

Server将以上组件混合创建transport、input和output的protocol、processor、连接并接受消息

  • TSimpleServer – 简单的单线程服务模型,常用于测试
  • TThreadPoolServer – 多线程服务模型,使用标准的阻塞式IO。
  • TNonblockingServer – 多线程服务模型,使用非阻塞式IO(需使用TFramedTransport数据传输方式)