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数据传输方式)