Thrift 中的 Transport
Thrift 中有 TTransport
和 TServerTransport
,封装了底层传输层的数据读写;分别用于客户端和服务端
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 的抽象类,底层使用 NIOTNonblockingSocket
:TNonblockingTransport
的实现类,基于 SocketChannel 的 Transport,是非阻塞的TIOStreamTransport
: 基于 IO 流的 TransportTSocket
:TIOStreamTransport
的子类,底层使用Socket
TSimpleFileTransport
:基于文件的 Transport,会将流写入文件或者从文件读取流TFileTransport
: 基于文件的 Transport,会将流写入文件或者从文件读取流THttpClient
:基于HttpClient
或HttpURLConnection
,会通过 HTTP 的方式发送请求,通常用于TServlet
的服务端ByteBuffer
: 基于 ByteBuffer 的 TransportTMemoryInputTransport
:基于内存数组的 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
:非阻塞服务端抽象类,提供了选择器的注册TNonblockingServerSocket
:TNonblockingServerTransport
的实现类,底层使用 NIO 的ServerSocketChannel
非阻塞 TransportTServerSocket
:使用ServerSocket
的阻塞 Transport
Thrift 中的 Transport相关推荐
- Thrift中实现Java与Python的RPC互相调用
场景 Thrift介绍以及Java中使用Thrift实现RPC示例: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1086894 ...
- ThreadPoolExecutor源码学习(2)-- 在thrift中的应用
thrift作为一个从底到上除去业务逻辑代码,可以生成多种语言客户端以及服务器代码,涵盖了网络,IO,进程,线程管理的框架,着实庞大,不过它层次清晰,4层每层解决不同的问题,可以按需取用,相当方便. ...
- thrift中TNonblockingServer的简单用法
最近在项目中需要把客户端的一些信息发送到服务器上,听起来是个很简单的需求,但是实际考虑下,觉得如果自己手工实现,工作量也不小,而且尽是些繁琐且无聊的事情,遂考虑用现成的库来实现.对比了protocol ...
- thrift 中的坑
一.介绍 thrift 的本质是RPC,详细介绍见: 维基百科:thrift 二.python示例 1.client import sys import glob sys.path.append('g ...
- thrift如何定义Java中的object类型
目录 thrift如何定义Java中的Object类型 方法一:使用联合(union) 方法二:使用特殊类型(binary) 终极方法:序列化 thrift如何定义Java中的Object类型 由于t ...
- thrift使用小记_CUDev-ChinaUnix博客
thrift使用小记_CUDev-ChinaUnix博客 thrift使用小记 (2011-09-19 21:28) 标签: 客户端 接口 Facebook transport protoc ...
- 对Thrift的一点点理解
对Thrift的一点点理解 这是一篇学习Thrift的笔记,包含了这样几点内容: 简单介绍Thrift 怎样使用Thrift Thrift整体架构 Thrift中的知识点 struct可以设置默认值 ...
- Apache Thrift使用简介
Apache Thrift 是 Facebook 实现的一种高效的.支持多种编程语言的远程服务调用的框架.和其它RPC框架相比,它主要具有如下连个特点: 高性能. 它采用的是二进制序列化,并且用的是长 ...
- 记一次内存溢出的分析经历——使用thrift
背景: 有一个项目做一个系统,分客户端和服务端,客户端用c++写的,用来收集信息然后传给服务端(客户端的数量还是比较多的,正常的有几千个), 服务端用Java写的(带管理页面),属于RPC模式,中间的 ...
最新文章
- python logging命令注入_整理后的手动注入脚本命令
- SpringBoot整合MyBatis并实现简单的查询功能
- NS3 MyApp Class Reference
- 目标检测经典算法集锦
- canvas 加载图片
- 海康服务器协议,国标流媒体服务器GB28181协议和海康设备的交互过程记录
- 关于打印室计算机购置的申请书,物资采购申请书格式范文
- 驱动读写应用程序内存
- python解二元方程组_Python 解线性方程组
- 深圳大学《计算机论题》作业:伦理分析的一般框架进行案例分析
- Anaconda安装torch
- 运行jar包时报错:[mybatis-config.xml] cannot be opened because it does not exist
- 双重认证怎么开_facebook bm认证很重要
- Proofs for Inner Pairing Products and Applications 学习笔记
- 推荐一些好的英语python书籍知识点
- 马来西亚之旅——吉隆坡、马六甲、槟城和亚庇攻略
- TSLAM室内自主定位方案
- ZYNQ开发系列——ZYNQ系统的搭建
- python+appium自动化测试-获取短信+图片验证码
- PHP重要信息通知(短信通知+语音播报)解决方案