C#使用Thrift作为RPC框架入门(三)之三层架构
前言
这是我们讲解Thrift框架的第三篇文章,前两篇我们讲了Thrift作为RPC框架的基本用法以及架构的设计。为了我们更好的使用和理解Thrift框架,接下来,我们将来学习一下Thrift框架提供的名称空间下的类。
名称空间
Thrift一共给我们提供了5个名称空间,看下图
文章图片
先讲**Transport**名称空间下的类,这个名称空间主要是Thrift框架帮我们封装的一些在不同应用场景下的传输层的类。
Transport--传输层 我们先看下这个名称空间下的类,如下图:
文章图片
【C#使用Thrift作为RPC框架入门(三)之三层架构】在这些类中,按用途可以分为两类:
+ 客户端使用的类
- THttpClient
- TNamedPipeClientTransport
- TSocket
- TTLSSocket
- TNamedPipeServerTransport
- TServerSocket
- TTLSServerSocket
+ TCP协议
- TSocket
- TTLSSocket
- TServerSocket
- TTLSServerSocket
- TNamedPipeClientTransport
- TNamedPipeServerTransport
- THttpClient
- TBufferedTransport
- TFramedTransport
类的继承关系 分析该名称空间加下的类,我们可以发现除了一些帮助类外,他们都继承自一些两个接口:
- TServerTransport
- TTransport
协议层 Protocol so,我们先来看一下大致的类库结构:
文章图片
在协议层中我们经常使用到这些类代表的协议
- TBinaryProtocol 它是一种二进制格式的传输协议,也是框架默认使用的协议
- TCompactProtocol 它是一种紧凑型的二进制格式传输协议
- TJSONProtocol 它将数据封装成Json格式进行传输,这种格式压缩率低,我们一般使用上面两组格式
服务器层 Server 看名称空间类型结构:
文章图片
该名称空间下的类型较少,但它确实撑起Thrift框架的半壁江山,接下来我们来分析一下这个名称空间仅有的三个非抽象类(还有一个接口,提供服务类处理客户端消息前的通知,通过服务器类的set方法进行装载):
- TSimpleServer 阻塞式服务器类,即处理一个客户端请求时,不会再接收其他客户端的链接请求,直到上一个客户端处理完成
- TThreadedServer 非阻塞式服务器类,它提供了一个循环监听客户端请求,并将请求客户端存放到一个客户端集合中,然后通过另一个线程循环提取请求客户端,最后利用自定义的线程池进行处理请求
- TThreadPoolServer 非阻塞式服务器类,和上个类一样,唯一的区别是它利用了. net runtime提供的线程池进行处理客户端请求
推荐阅读
- 由浅入深理解AOP
- 【译】20个更有效地使用谷歌搜索的技巧
- mybatisplus如何在xml的连表查询中使用queryWrapper
- MybatisPlus|MybatisPlus LambdaQueryWrapper使用int默认值的坑及解决
- MybatisPlus使用queryWrapper如何实现复杂查询
- iOS中的Block
- Linux下面如何查看tomcat已经使用多少线程
- 使用composer自动加载类文件
- android|android studio中ndk的使用
- 使用协程爬取网页,计算网页数据大小