前言

  这是我们讲解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. GoLang设计模式10 - 中介者模式

    中介者模式是一种行为型设计模式.在中介者模式中创建了一个中介对象来负责不同类间的通信.因为这些类不需要直接交互,所以也就能避免它们之间的直接依赖,实现解耦的效果. 中介者模式的一个典型案例是老式小火车 ...

  2. Kettle的安装及简单使用

    Kettle的安装及简单使用 目录 Kettle的安装及简单使用 一.kettle概述 二.kettle安装部署和使用 Windows下安装 案例1:MySQL to MySQL 案例2:使用作业执行 ...

  3. Servlet学习一(Servlet的使用流程)

    一.servlet运行流程 运行流程:浏览器发送请求到服务器,服务器根据url地址在webapps中寻找对应的项目文件夹然后再web.xml中检索对应的servlet,并进行调用二.servlet类写 ...

  4. Python语法1

    变量 命名规则 变量名必须是大小写英文字母.数字或下划线 _ 的组合,不能用数字开头,并且对大小写敏感 变量赋值 同一变量可以反复赋值,而且可以是不同类型的变量 i=2; i="name&q ...

  5. 用例图示例:使用系统边界表示多个项目 / Using System Boundary to model Multiple Projects in Use Case Diagram

    什么是用例图? 用例是一种捕获系统功能需求的技术.用例描述了一个独立于实现细节的期望行为.用例的目标是捕获用户设想的所有系统级功能.从用户的角度来看,用例是关于系统应该做什么的.用例捕获系统利益相关者 ...

  6. [no_code][Alpha]项目展示博客

    $( "#cnblogs_post_body" ).catalog() 团队项目链接 github 后端 github OCR文档-含部分所需测试代码目前private API调用 ...

  7. 嵌入式STM32的GPIO口工作模式的介绍

    一.输入模式 1. 浮空输入 浮空输入模式下,上拉和下拉两个开关断开,高或低电平通过施密特触发器到达输入数据寄存器,CPU可以通过读取输入数据寄存器从而读取到外部输入的高低电平值. 2. 输入上拉模式 ...

  8. 六步教你如何用PADS进行PCB设计?

    在使用PADS进行PCB设计的过程中,需要对印制板的设计流程以及相关的注意事项进行重点关注,这样才能更好的为工作组中的设计人员提供系统的设计规范,同时也方便设计人员之间进行相互的交流和检查. 02 设 ...

  9. Spring Security:简单的保护一个SpringBoot应用程序(总结)

    Spring Security 在 Java类中的配置 在 Spring Security 中使用 Java配置,可以轻松配置 Spring Security 而无需使用 XML . 在Spring ...

  10. 编写POC时候的几个参考项目

    0x01. 背景 在编写pocsuite时候,会查阅大量的文件,poc利用方式. ​ 1. pocsuite是什么 Pocsuite 是由知道创宇404实验室打造的一款开源的远程漏洞测试框架.它是知道 ...