前言

  这是我们讲解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在实际应用场景中我们应该注意问题

C#使用Thrift作为RPC框架入门(三)之三层架构的更多相关文章

  1. CSharp使用Thrift作为RPC框架入门(一)

    前言 本文将介绍由 Facebook 开发的远程服务调用框架 Apache Thrift,它采用接口描述语言定义并创建服务,支持可扩展的跨语言服务开发,所包含的代码生成引擎可以在多种语言中,如 C++ ...

  2. 【原创】NIO框架入门(三):iOS与MINA2、Netty4的跨平台UDP双向通信实战

    前言 本文将演示一个iOS客户端程序,通过UDP协议与两个典型的NIO框架服务端,实现跨平台双向通信的完整Demo.服务端将分别用MINA2和Netty4进行实现,而通信时服务端你只需选其一就行了.同 ...

  3. 远程服务调用RPC框架介绍,微服务架构介绍和RPC框架对比,dubbo、SpringClound对比

    远程服务调用RPC框架介绍,微服务架构介绍和RPC框架对比,dubbo.SpringClound对比 远程服务调用RPC框架介绍,RPC简单的来说就是像调用本地服务一样调用远程服务. 分布式RPC需要 ...

  4. Angular JS从入门基础 mvc三层架构 常用指令

    Angular JS从入门基础  mvc模型 常用指令 ★ 最近一直在复习AngularJS,它是一款优秀的前端JS框架,已经被用于Google的多款产品当中.AngularJS有着诸多特性,最为核心 ...

  5. java:(九大内置对象,计算服务器访问次数,filter过滤器,MVC框架,MVC和三层架构的关系)

    1.九大内置对象: <%@ page language="java" import="java.util.*" pageEncoding="UT ...

  6. 从零开始编写自己的C#框架(5)——三层架构介绍

    三层架构对于开发人员来说,已经是司空见惯了,除了大型与超小型项目外,大多都是这种架构来进行开发. 在这里为初学者们简单介绍一下三层架构: (下面内容摘自<趣味理解:三层架构与养猪—<.NE ...

  7. RPC框架基本原理(三):调用链路分析

    本文主要阐述下RPC调用过程中的寻址,序列化,以及服务端调用问题. 寻址 随机寻址 从可用列表中,随机选择地址 一致性寻址 可用服务地址一致性hash管理:根据可服务的地址,构造treemap,计算c ...

  8. C#使用Thrift作为RPC框架实战(四)之TSocket

    前言 在前几个小节中我们讲了Thrift框架的基本概念以及重要的名称空间,接下来的几个小节,我们将站在实战的角度来深入讲解一些Thrift的重要类型.本小节我先要讲一下Thrift框架支持TCP通信的 ...

  9. 带你手写基于 Spring 的可插拔式 RPC 框架(三)通信协议模块

    在写代码之前我们先要想清楚几个问题. 我们的框架到底要实现什么功能? 我们要实现一个远程调用的 RPC 协议. 最终实现效果是什么样的? 我们能像调用本地服务一样调用远程的服务. 怎样实现上面的效果? ...

随机推荐

  1. FastAPI 学习之路(二)

    之前的文章已经介绍了如何安装,以及简单的使用,这篇文章呢,我们就不去分享如何安装对应的包了. 我们如何去编写呢,其实很简单,按照下面的步骤,一个简单的基于fastapi的接口就编写完毕. 首先:创建一 ...

  2. find+xargs+sed批量替换

    写代码时经常遇到要把 .c  和 .h的文件中的某些内容全部替换的情况,用sourceinsight 进行全局的查找是一个方法,但是sourceinsight只能替换一个文件中的字符串,不能同时替换多 ...

  3. tcl概述

    tcl,全名tool command language,是一种通用的工具语言. 1)每个命令之间,通过换行符或者分号隔开: 2)tcl的每个命令包含一个或者多个单词,默认第一个单词表示命令,第二个单词 ...

  4. win 常用修复蓝屏,系统比对最后更新20210804

    您可以尝试以下方案: 在管理员命令提示符下键入以下命令:Dism /Online /Cleanup-Image /ScanHealth这条命令将扫描全部系统文件并和官方系统文件对比,扫描计算机中的不一 ...

  5. LeetCode:堆专题

    堆专题 参考了力扣加加对与堆专题的讲解,刷了些 leetcode 题,在此做一些记录,不然没几天就忘光光了 力扣加加-堆专题(上) 力扣加加-堆专题(下) 总结 优先队列 // 1.java中有优先队 ...

  6. [BUAA]起点 软工第一次作业-热身

    项目 内容 这个作业属于哪个课程 2020计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 第一次作业-热身! 我在这个课程的目标是 了解软件开发,提高自己的工程能力和团队协作能力 这个作业在哪 ...

  7. Linux Shell Here Document

    Here Document 是一种有特殊用处的代码块,他使用IO重定向的形式记录了一段临时的文本或交互命令,并且把这些文本或命令 依次的传递给一个程序或一个命令,作为他运行时的标准输入. Here d ...

  8. HttpContext.Current.Request.Url 地址:获取域名

    假设当前页完整地址是:http://www.test.com/aaa/bbb.aspx?id=5&name=kelli 协议名----http://域名  ---- www.test.com站 ...

  9. Centos 7 局域网 yum 源搭建

    一.需求及实现方式介绍: 需求:现在各个软件版本更新迭代很快,在我们部署一套集群(比如:openstack)后,如果过一段时间想扩展集群时发现软件版本早已迭代更新,安装后导致和现有环境或多或少不兼容, ...

  10. Jetbrains 系 IDE 编辑器的代码提示功能

    著名的 Jetbrains 可谓编程界的一大福音,众多有名代码编辑器比如 ItelliJ IDEA.PHPStorm.WebStorm.PyCharm 等,均出自这家公司麾下. 对于中国的Java开发 ...