英语不好气死人啊,thrift官方文档写得很好,就是全英文看起来有点吃力。先把一些关键字列出来解释一下,怕自己以后忘记了。因为对C#熟悉一些,以下都是根据C#源码写的。
看源码和官方文档是一个好习惯,一定要坚持!!!
Thrift最重要的三个东西:TTransport(I/O层)、TProtocol(数据封装协议层)、TProcessor(服务端请求处理器)。
TTransport告诉我们写到哪里去、从哪里读;TProtocol告诉我们数据怎么包装,如何进行序列化和反序列化;TProcessor提供面向对象的数据处理接口(代码自动生成,需要自己实现iface/ISync进行数据处理)。这三者就像送快递:
- client调用生成的接口,TProtocol把数据和目标接口打包
- Transport把数据发给TServerTransport
- TServerTransport告知对应的TProcess开始分拣数据
- TProcess从TServerTransport中读取数据头,找到要发送的目标接口
- TProcess通知目标接口有调用
- 目标接口调用InProrotocol读取剩下的数据,解析后调用Handle
- Handle的返回值通过OutProtocol写回TServerTransport,最终返回给client
TTransport 传输层/读写抽象层
这是一个最基础的数据读写抽象层,使数据读写从其他thrift部分分离解耦。读写抽象层分三块,一块是client端读写抽象层,一部分是服务端读写抽象层,还有一个读写抽象工厂。
1. TTransport 客户端读写抽象层
它的子类有很多实现
1.1 TBufferTransport
实现数据缓存
thrift之TTransport层的缓存传输类TBufferedTransport和缓冲基类TBufferBase
1.2 TFramedTransport
1.3 THttpClient
1.4 TMemoryBuffer
1.5 TNamedPipeClientTransport
1.7 TStreamTransport
1.8 TSocket
TSocket继承自TStreamTransport,是一个TCP网络传输的流式读写实现。
1.9 TTLSSocket
TTLSSocket继承自TStreamTransport,SSL Socket包装类。
2 TServerTransport 服务端读写抽象层
用于服务端的读写抽象层
2.1 TServerSocket
继承自TServerTransport,socket读写实现
2.2 TTLSServerSocket
继承自TServerTransport,SSL Socket读写实现
2.3 TNamedPipeServerTransport
3 TTransportFactory 读写抽象层工厂
这个类里面就只有一个一个虚方法:
public virtual TTransport GetTransport(TTransport trans)
{
return trans;
}
TFramedTransport.Factory继承自此类。
TProcotol 数据封包
将数据映射成可传输的格式,给出编码机制并对数据进行序列化和反序列化。
TBinaryProtocol
二进制封包
TCompactProtocol
协议封包、契约
TJSONProtocol
json格式封包
以下两个我还没搞清楚:
TProtocolDecorator
和装饰模式有关
TMultiplexedProtocol:TProtocolDecorator
多路复用,一个socket调用两个service需要使用到
TProcotolFactory 接口
接口里面就一个需要实现的方法:
TProtocol GetProtocol(TTransport trans);
TBinaryProtocol、TCompactProtocol、TJSONProtocol都实现了自己的TProcotolFactory 接口。
TProcessor
封装了从输入数据流中读数据和向数据流中写数据的操作,读写数据用TProtocol对象表示
主要工作流程:
- 从连接中读取数据(使用输入TProtocol iprot)
- 将处理授权给handler(由用户实现)
- 最后将结果写到连接上(使用 TProtocol oprot)
TMultiplexedProcessor
TProcessorFactory 接口
里面就一个需要实现的方法:
TProcessor GetProcessor(TTransport trans, TServer server = null);
在Thrift中有一个实现TSingletonProcessorFactory,默认使用的都是这个实现。
在Thrift 双向通信实现(C#版)中我们实现了一个TProcessorFactory。
还有一个泛型实现:TPrototypeProcessorFactory
TServer
将TProtocol、TTransport、TProcessor组合在一起,构成thrift服务端
- 创建一个transport对象
- 位transport对象创建输入输出protocol
- 基于输入输出创建processor
- 等待连接请求,并将之交给processor处理
TSimpleServer
单线程,一般用于测试
TThreadedServer
多线程(不是线程池)
TThreadPoolServer
线程池