前言
这是我们讲解Thrift框架的第三篇文章,前两篇我们讲了Thrift作为RPC框架的基本用法以及架构的设计。为了我们更好的使用和理解Thrift框架,接下来,我们将来学习一下Thrift框架提供的名称空间下的类。
名称空间
Thrift一共给我们提供了5个名称空间,看下图
先讲**Transport**名称空间下的类,这个名称空间主要是Thrift框架帮我们封装的一些在不同应用场景下的传输层的类。
Transport--传输层
我们先看下这个名称空间下的类,如下图:
在这些类中,按用途可以分为两类:
+ 客户端使用的类
- THttpClient
- TNamedPipeClientTransport
- TSocket
- TTLSSocket
+ 服务器端使用的类
- TNamedPipeServerTransport
- TServerSocket
- TTLSServerSocket
按照传输协议可以分为三类:
+ TCP协议
- TSocket
- TTLSSocket
- TServerSocket
- TTLSServerSocket
+ NamedPipe命名管道
- TNamedPipeClientTransport
- TNamedPipeServerTransport
+ Http协议
- THttpClient
我们可以看到上面一些分类并没有包含所有的该**Transport**名称空间下的所有类,那是因为这些类是一种包装类,它用于包装上述不同协议、不同用途下的传输层的类,它包含一下这些类:
- TBufferedTransport
- TFramedTransport
类的继承关系
分析该名称空间加下的类,我们可以发现除了一些帮助类外,他们都继承自一些两个接口:
- TServerTransport
- TTransport
我们在实际使用过程中,我们可以清晰的通过这两组接口的子类来区分它们的用途。
协议层 Protocol
so,我们先来看一下大致的类库结构:
在协议层中我们经常使用到这些类代表的协议
- TBinaryProtocol 它是一种二进制格式的传输协议,也是框架默认使用的协议
- TCompactProtocol 它是一种紧凑型的二进制格式传输协议
- TJSONProtocol 它将数据封装成Json格式进行传输,这种格式压缩率低,我们一般使用上面两组格式
Thrift提供的传输协议一般是够用的,如果你需要特殊的格式协议,你可以继承TProtocol抽象类
服务器层 Server
看名称空间类型结构:
该名称空间下的类型较少,但它确实撑起Thrift框架的半壁江山,接下来我们来分析一下这个名称空间仅有的三个非抽象类(还有一个接口,提供服务类处理客户端消息前的通知,通过服务器类的set方法进行装载):
- TSimpleServer 阻塞式服务器类,即处理一个客户端请求时,不会再接收其他客户端的链接请求,直到上一个客户端处理完成
- TThreadedServer 非阻塞式服务器类,它提供了一个循环监听客户端请求,并将请求客户端存放到一个客户端集合中,然后通过另一个线程循环提取请求客户端,最后利用自定义的线程池进行处理请求
- TThreadPoolServer 非阻塞式服务器类,和上个类一样,唯一的区别是它利用了. net runtime提供的线程池进行处理客户端请求
总结
Thrift三个重要层面的类库简单说明就到此结束了,接下来,我将说明Thrift在实际应用场景中我们应该注意问题