Thrift 中有 TTransportTServerTransport,封装了底层传输层的数据读写;分别用于客户端和服务端

TTransport

方法

  • open

用于建立与 Server 端的连接

public abstract void open() throws TTransportException;
  • close

关闭连接

public abstract void close();
  • read

用于读取数据

public abstract int read(byte[] buf, int off, int len) throws TTransportException;
  • write

用于写入数据

public abstract void write(byte[] buf, int off, int len) throws TTransportException;
  • flush

清空缓冲区中的数据,发送给服务端

public void flush() throws TTransportException {}

实现类

非封装的 Transport

  • TNonblockingTransport: 非阻塞的 Transport 的抽象类,底层使用 NIO
  • TNonblockingSocket: TNonblockingTransport 的实现类,基于 SocketChannel 的 Transport,是非阻塞的
  • TIOStreamTransport: 基于 IO 流的 Transport
  • TSocket: TIOStreamTransport 的子类,底层使用 Socket
  • TSimpleFileTransport:基于文件的 Transport,会将流写入文件或者从文件读取流
  • TFileTransport: 基于文件的 Transport,会将流写入文件或者从文件读取流
  • THttpClient:基于 HttpClientHttpURLConnection,会通过 HTTP 的方式发送请求,通常用于 TServlet 的服务端
  • ByteBuffer: 基于 ByteBuffer 的 Transport
  • TMemoryInputTransport:基于内存数组的 Transport,会从底层的数组读取,用于测试场景
  • TMemoryBuffer:使用内存数组作为缓冲区的 Transport,用于测试场景

封装的 Transport

  • TZlibTransport: 压缩的 Transport,会将流压缩后再发送
  • AutoExpandingBufferReadTransport: 可扩展读缓冲区的 Transport,使用可变数组作为缓冲区
  • AutoExpandingBufferWriteTransport: 可扩展写缓冲区的 Transport,使用可变数组作为缓冲区
  • TSaslTransport:支持 SASL(Simple Authentication and Security Layer) 认证的 Transport,有两个实现类,用于客户端的TSaslClientTransport 和用于服务端的 TSaslServerTransport
  • TFramedTransport:缓冲的 Transport,通过在前面带有4字节帧大小的消息来确保每次都完全读取消息
  • TFastFramedTransport: 复用并扩展了读写缓冲区的 Transport,避免每次都创建新的 byte 数组

TServerTransport

方法

  • listen

监听指定的端口

public abstract void listen() throws TTransportException;
  • accept

用与接受连接

public final TTransport accept() throws TTransportException {TTransport transport = acceptImpl();if (transport == null) {throw new TTransportException("accept() may not return NULL");}return transport;
}
  • close

断开连接,停止监听端口,关闭服务

public abstract void close();

实现类

  • TNonblockingServerTransport:非阻塞服务端抽象类,提供了选择器的注册
  • TNonblockingServerSocketTNonblockingServerTransport的实现类,底层使用 NIO 的 ServerSocketChannel非阻塞 Transport
  • TServerSocket:使用 ServerSocket 的阻塞 Transport

Thrift 中的 Transport相关推荐

  1. Thrift中实现Java与Python的RPC互相调用

    场景 Thrift介绍以及Java中使用Thrift实现RPC示例: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1086894 ...

  2. ThreadPoolExecutor源码学习(2)-- 在thrift中的应用

    thrift作为一个从底到上除去业务逻辑代码,可以生成多种语言客户端以及服务器代码,涵盖了网络,IO,进程,线程管理的框架,着实庞大,不过它层次清晰,4层每层解决不同的问题,可以按需取用,相当方便. ...

  3. thrift中TNonblockingServer的简单用法

    最近在项目中需要把客户端的一些信息发送到服务器上,听起来是个很简单的需求,但是实际考虑下,觉得如果自己手工实现,工作量也不小,而且尽是些繁琐且无聊的事情,遂考虑用现成的库来实现.对比了protocol ...

  4. thrift 中的坑

    一.介绍 thrift 的本质是RPC,详细介绍见: 维基百科:thrift 二.python示例 1.client import sys import glob sys.path.append('g ...

  5. thrift如何定义Java中的object类型

    目录 thrift如何定义Java中的Object类型 方法一:使用联合(union) 方法二:使用特殊类型(binary) 终极方法:序列化 thrift如何定义Java中的Object类型 由于t ...

  6. thrift使用小记_CUDev-ChinaUnix博客

    thrift使用小记_CUDev-ChinaUnix博客 thrift使用小记 (2011-09-19 21:28) 标签:  客户端  接口  Facebook  transport  protoc ...

  7. 对Thrift的一点点理解

    对Thrift的一点点理解 这是一篇学习Thrift的笔记,包含了这样几点内容: 简单介绍Thrift 怎样使用Thrift Thrift整体架构 Thrift中的知识点 struct可以设置默认值 ...

  8. Apache Thrift使用简介

    Apache Thrift 是 Facebook 实现的一种高效的.支持多种编程语言的远程服务调用的框架.和其它RPC框架相比,它主要具有如下连个特点: 高性能. 它采用的是二进制序列化,并且用的是长 ...

  9. 记一次内存溢出的分析经历——使用thrift

    背景: 有一个项目做一个系统,分客户端和服务端,客户端用c++写的,用来收集信息然后传给服务端(客户端的数量还是比较多的,正常的有几千个), 服务端用Java写的(带管理页面),属于RPC模式,中间的 ...

最新文章

  1. python logging命令注入_整理后的手动注入脚本命令
  2. SpringBoot整合MyBatis并实现简单的查询功能
  3. NS3 MyApp Class Reference
  4. 目标检测经典算法集锦
  5. canvas 加载图片
  6. 海康服务器协议,国标流媒体服务器GB28181协议和海康设备的交互过程记录
  7. 关于打印室计算机购置的申请书,物资采购申请书格式范文
  8. 驱动读写应用程序内存
  9. python解二元方程组_Python 解线性方程组
  10. 深圳大学《计算机论题》作业:伦理分析的一般框架进行案例分析
  11. Anaconda安装torch
  12. 运行jar包时报错:[mybatis-config.xml] cannot be opened because it does not exist
  13. 双重认证怎么开_facebook bm认证很重要
  14. Proofs for Inner Pairing Products and Applications 学习笔记
  15. 推荐一些好的英语python书籍知识点
  16. 马来西亚之旅——吉隆坡、马六甲、槟城和亚庇攻略
  17. TSLAM室内自主定位方案
  18. ZYNQ开发系列——ZYNQ系统的搭建
  19. python+appium自动化测试-获取短信+图片验证码
  20. PHP重要信息通知(短信通知+语音播报)解决方案

热门文章

  1. 装袋法(bagging)和随机森林(random forests)的区别
  2. spring中注解属性scope的prototype是什么意思?
  3. JS年月日格式的日期加一天减一天
  4. PHP实现快递鸟即时查询接口
  5. RocketMQ系列:rocketmq的benchmark工具
  6. 新手向强化学习入门:机器如何理解世界以及RL基本概念
  7. vsftpd配置笔记
  8. tomcat服务器访问webapps资源404
  9. python汉明距离检索_汉明距离(Python3)
  10. DNS server列表整理