前言

  这是我们讲解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. css3新增文本属性

    css3新增属性 边框属性 背景属性 文本属性 颜色属性 文本属性 属性 说明 text-shadow 为文字添加阴影 box-shadow 在元素的框架上添加阴影效果 text-overflow 确 ...

  2. Catch That Cow 经典广搜

    链接:http://poj.org/problem?id=3278 题目: Farmer John has been informed of the location of a fugitive co ...

  3. Java(21)内部类

    作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15228411.html 博客主页:https://www.cnblogs.com/testero ...

  4. 谈谈BEM规范(含代码)

    css规范之BEM规范 前言 引用一句经典名言在编程的世界里其中一件最难的事情就是命名,不管是设计到编程语言还是标记语言都会有命名的需求.今天聊的就是关于css的命名规范的发展过程以及演变. 命名的发 ...

  5. BUAA软工-结对项目作业

    结对项目作业 项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 结对项目作业 我在这个课程的目标是 通过这门课锻炼软件开发能力和经验,强化与他人合作 ...

  6. 架构师之路-https底层原理

    引子 先说说我对架构师的理解.从业务能力上,需要的是发现问题和解决问题的能力:从团队建设上,需要的是能培养团队的业务能力:从项目管理上,把控好整个项目和软件产品的全生命周期. 我搜索了一下架构师的培训 ...

  7. CSP-S2021幽寂

    不管怎么说,这次比赛考的比这一段时间以来的模拟赛都难看 难受,但是也不想太表现出来,所以更难受.... 有点害怕会退役...... Day -6 前一天晚上回宿舍的时候和\(zxs\)一路,聊的过程中 ...

  8. NOIP 模拟 $79\; \rm y$

    题解 \(by\;zj\varphi\) NOIP2013 的原题 最简单的思路就是一个 bfs,可以拿到 \(70pts\) 75pts #include<bits/stdc++.h> ...

  9. python 模块 hashlib(提供多个不同的加密算法)

    hashlib是涉及安全散列和消息摘要,提供多个不同的加密算法借口,如SHA1.SHA224.SHA256.SHA384.SHA512.MD5等. import hashlib m = hashlib ...

  10. 测试开发【提测平台】分享13-远程搜索和路由$route使用实现新建提测需求

    微信搜索[大奇测试开],关注这个坚持分享测试开发干货的家伙. 本篇继续提测平台开发,按惯例先给出学习的思维导图,以便快速了解学习知识和平台功能实现的重点. 基本知识点学习 远程搜索 显示的数据通过输入 ...