C#使用Thrift作为RPC框架入门(三)之三层架构
前言
这是我们讲解Thrift框架的第三篇文章,前两篇我们讲了Thrift作为RPC框架的基本用法以及架构的设计。为了我们更好的使用和理解Thrift框架,接下来,我们将来学习一下Thrift框架提供的名称空间下的类。
名称空间
Thrift一共给我们提供了5个名称空间,看下图
先讲**Transport**名称空间下的类,这个名称空间主要是Thrift框架帮我们封装的一些在不同应用场景下的传输层的类。
Transport--传输层
我们先看下这个名称空间下的类,如下图:
在这些类中,按用途可以分为两类:
+ 客户端使用的类-
THttpClient
-
TNamedPipeClientTransport
-
TSocket
-
TTLSSocket
-
TNamedPipeServerTransport
-
TServerSocket
-
TTLSServerSocket
按照传输协议可以分为三类:
+ TCP协议-
TSocket
-
TTLSSocket
-
TServerSocket
-
TTLSServerSocket
-
TNamedPipeClientTransport
-
TNamedPipeServerTransport
-
THttpClient
我们可以看到上面一些分类并没有包含所有的该**Transport**名称空间下的所有类,那是因为这些类是一种包装类,它用于包装上述不同协议、不同用途下的传输层的类,它包含一下这些类:
-
TBufferedTransport
-
TFramedTransport
类的继承关系
分析该名称空间加下的类,我们可以发现除了一些帮助类外,他们都继承自一些两个接口:
- TServerTransport
- TTransport
我们在实际使用过程中,我们可以清晰的通过这两组接口的子类来区分它们的用途。
协议层 Protocol
so,我们先来看一下大致的类库结构:
在协议层中我们经常使用到这些类代表的协议
-
TBinaryProtocol 它是一种二进制格式的传输协议,也是框架默认使用的协议
-
TCompactProtocol 它是一种紧凑型的二进制格式传输协议
-
TJSONProtocol 它将数据封装成Json格式进行传输,这种格式压缩率低,我们一般使用上面两组格式
Thrift提供的传输协议一般是够用的,如果你需要特殊的格式协议,你可以继承TProtocol抽象类
服务器层 Server
看名称空间类型结构:
该名称空间下的类型较少,但它确实撑起Thrift框架的半壁江山,接下来我们来分析一下这个名称空间仅有的三个非抽象类(还有一个接口,提供服务类处理客户端消息前的通知,通过服务器类的set方法进行装载):
-
TSimpleServer 阻塞式服务器类,即处理一个客户端请求时,不会再接收其他客户端的链接请求,直到上一个客户端处理完成
-
TThreadedServer 非阻塞式服务器类,它提供了一个循环监听客户端请求,并将请求客户端存放到一个客户端集合中,然后通过另一个线程循环提取请求客户端,最后利用自定义的线程池进行处理请求
-
TThreadPoolServer 非阻塞式服务器类,和上个类一样,唯一的区别是它利用了. net runtime提供的线程池进行处理客户端请求
总结
Thrift三个重要层面的类库简单说明就到此结束了,接下来,我将说明Thrift在实际应用场景中我们应该注意问题
- 如何在Visual Studio 2017中使用C# 7+语法 构建NetCore应用框架之实战篇(二):BitAdminCore框架定位及架构 构建NetCore应用框架之实战篇系列 构建NetCore应用框架之实战篇(一):什么是框架,如何设计一个框架 NetCore入门篇:(十二)在IIS中部署Net Core程序
- 简单的三层框架以及使用dbutils进行数据库操作(入门)
- 三层架构中使用实体类填充泛型集合代替DataTable解决方案(ASP.NET+C#)
- 三层架构中使用实体类填充泛型集合代替DataTable解决方案(ASP.NET+C#)
- 运用asp2.0创建和使用三层数据架构(C#)--【第一篇:简介之建立数据访问层】
- C#三层架构的UserManager类(注册登录使用)
- 使用selenim作为项目测试框架,适用asp.net c# 网站测试
- RPC学习--C#使用Thrift简介,C#客户端和Java服务端相互交互
- Apache thrift - 使用,内部实现及构建一个可扩展的RPC框架
- 使用RPC框架Apache Thrift在远程主机运算并返回
- 基于.Net(C#开发)平台的三层框架架构软件的设计与实现
- [C#新手入门 三] 使用DataTable作为存储过程的参数
- 如果是作为客户端的HTTP+JSON接口工程,没有JSP等view视图的情况下,使用Jersery框架开发绝对是第一选择。而在基于Spring3 MVC的架构下,对HTTP+JSON的返回类型也有很好
- 简单的三层框架以及使用dbutils进行数据库操作(入门)
- 三层架构中使用实体类填充泛型集合代替DataTable解决方案(ASP.NET+C#)
- c#动态编译,自己做了个c#脚本管理框架,可以作为其他应用的插件使用。增强程序的拓展性
- 使用thrift作为go和C++中间rpc及问题
- 基于.Net(C#开发)平台的三层框架架构软件的设计与实现
- 简单的三层框架以及使用dbutils进行数据库操作(入门)
- Thrift使用入门-RPC服务