这一节我们从一下几个方面来讲一下Thrift的分层架构,按照官方的定义这是Thrift的网络栈,其中网络栈中分为一下几个部分,(由栈顶到栈底)server,processor,protocol,transport。下面我们按照这种结构来了解一下thrift。

  1. Transport层: 由于涉及到网络之间的数据传输,所以Thrift支持多种网络传输协议,比如TCP,HTTP等。Thrift Transport都是基于TCP/IP的,而底层都是通过socket来实现的。Transport层的作用是封装了网络中读写的过程,使之与系统底层实现解耦。Transport层提供的主要操作有:
      • open
      • close
      • read
      • write
      • flush

除了Transport提供的以上接口外,Thrift还提供serverTransport接口来接受或者新建原始的Transport类,serverTransport主要用于在服务器端创建Transport对象来接受服务。主要的接口有:

      • open
      • listen
      • accept
      • close

    至于上述方法更加具体的作用我们会在后面的源码分析中进行讲解。

  2.protocol层: 协议的主要作用是用于制定数据类型进行编码和解码,这是传输的第一步,然后我们就按照一定的规则将经过编码的数据封装到报文中进行传输,而上层只需要按照固定的解析格式来解析数据就行了。下面列举thrift支持的解析格式:

      • json
      • xml
      • 纯文本
      • 二进制

  3.processor: 上面的两个步骤已经实现了数据的编码,数据的传输,而数据传递到protocol层就是由processor来完成的,这一层的主要任务就是封装从输入流读取数据,输出到输出流的操作。    

  4. server: 在thrift中server就是真正执行过程的一方,就个人理解而言,服务器端真正进行业务流程通常最需要注意的问题就是线程,下面我们就按照线程将server进行分类:

      • TSimpleServer: 一种简单的server模式,是单线程的,也就是说一个rpc请求就占用了整个业务流程,无法再接受其他请求。
      • TThreadServer: 是一种多线程模型,每个请求对应一个线程,并且这个线程必须等到连接关闭才会被释放。存在很严重的弊端,当线程过多时会出现严重的内存占用。
      • TThreadPoolServer: 也是一种多线程模型,但是与上面的情况不同的是这个server模式是通过线程池来完成的,同样,也必须等到连接关闭才释放线程。
      • TNonblockingServer:  异步服务模型(非阻塞),必须依赖libevent来实现,具体我们后面针对源码进行分析。

  这样Thrift的基本知识我们就了解的差不多的,至于怎么实践我们会在后面章节学习,从下一节开始我们开始从源码的角度来学习Thrift。       

    

最新文章

  1. java-int类型:int默认为0导致更新操作未赋值的情况下将值更新为0
  2. java io流之字节流
  3. 纯CSS多级菜单
  4. JS---------IIFE(Imdiately Invoked Function Expression 立即执行的函数表达式)
  5. JavaWeb学习总结(三)——Tomcat服务器学习和使用(二)
  6. Golang tips ----- 函数
  7. linux下奇怪的“重名”文件
  8. Android学习Service中遇到的问题
  9. 代理服务器squid
  10. iOS开发——UI篇&提示效果
  11. dig(域信息搜索器)命令
  12. 免费开源ERP-成功案例分析(1)
  13. [Swift]LeetCode191. 位1的个数 | Number of 1 Bits
  14. Hystrix快速入门
  15. linux的基本操作(磁盘管理)
  16. 51Nod 1090 3个数和为0
  17. nginx配置文件 nginx.conf 说明
  18. dubbo 图片服务器(FastDFS) redis solr ActiveMQ等简单配置使用
  19. Linkedin工程师是如何优化他们的Java代码的
  20. sencha touch Carousel 自动切换

热门文章

  1. 性能优化——Web前端性能优化
  2. ubuntu 搭建 tomcat
  3. ubuntu mysql 配置(远程访问&&字符集设置&&忽略大小写)
  4. poj1328 Radar Installation —— 贪心
  5. lucene内置的评分函数
  6. mac快速正确的安装 Ruby, Rails 运行环境
  7. java数据的5种存储位置(转)
  8. C语言中的指针(二)
  9. PS 滤镜— — sparkle 效果
  10. CodeForces -163E :e-Government (AC自动机+DFS序+树状数组)