转自:http://blog.csdn.net/whycold/article/details/8535932
transport类体系架构与TProtocol类体系架构一样,所以这里就不重复叙述了,想了解可转去TProtocol类体系架构分析那篇。
下面将对transport层的几种transport类进行介绍:
1、TSocket 阻塞型socket, 用于客户端,采用系统函数read和write进行读写数据;
2、TServerSocket 非阻塞型socket, 用于服务器端, accecpt到的socket类型都是TSocket(即阻塞型socket);
3、TBufferedTransport和TFramedTransport都是有缓存的,均继承TBufferBase,调用下一层TTransport类进行读写操作,结构极为相似。只是TFramedTransport以帧为传输单位,帧结构为:4个字节(int32_t)+传输字节串,头4个字节是存储后面字节串的长度,该字节串才是正确需要传输的数据,因此TFramedTransport每传一帧要比TBufferedTransport和TSocket多传4个字节;
4、TMemoryBuffer继承TBufferBase,用于程序内部通信用,不涉及任何网络I/O,可用于三种模式:(1)OBSERVE模式,不可写数据到缓存;(2)TAKE_OWNERSHIP模式,需负责释放缓存;(3)COPY模式,拷贝外面的内存块到TMemoryBuffer。
5、TFileTransport直接继承TTransport,用于写数据到文件。对事件的形式写数据,主线程负责将事件入列,写线程将事件入列,并将事件里的数据写入磁盘。这里面用到了两个队列,类型为TFileTransportBuffer,一个用于主线程写事件,另一个用于写线程读事件,这就避免了线程竞争,在读完队列事件后,就会进行队列交换,由于由两个指针指向这两个队列,交换只要交换指针即可。它还支持以chunk(块)的形式写数据到文件。
6、TFDTransport是非常简单地写数据到文件和从文件读数据,它的write和read函数都是直接调用系统函数write和read进行写和读文件。
7、TSimpleFileTransport直接继承TFDTransport,没有添加任何成员函数和成员变量,不同的是构造函数的参数和在TSimpleFileTransport构造函数里对父类进行了初始化(打开指定文件并将fd传给父类和设置父类的close_policy为CLOSE_ON_DESTROY)。
8、TZlibTransport跟TBufferedTransport和TFramedTransport一样,调用下一层TTransport类进行读写操作。它采用<zlib.h>提供的zlib压缩和解压缩库函数来进行压解缩,写时先压缩再调用底层TTransport类发送数据,读时先调用TTransport类接收数据再进行解压,最后供上层处理。
9、TSSLSocket继承TSocket,阻塞型socket, 用于客户端;采用openssl的接口进行读写数据。checkHandshake()函数调用SSL_set_fd将fd和ssl绑定在一起,之后就可以通过ssl的SSL_read和SSL_write接口进行读写网络数据。
10、TSSLServerSocket继承TServerSocket,非阻塞型socket, 用于服务器端;accecpt到的socket类型都是TSSLSocket类型。
11、THttpClient和THttpServer是基于http1.1协议的继承Transport类型,均继承THttpTransport,其中
THttpClient用于客户端,THttpServer用于服务器端。两者都调用下一层TTransport类进行读写操作,均用到TMemoryBuffer作为读写缓存,只有调用flush()函数才会将真正调用网络I/O接口发送数据。
TTransport是所有Transport类的父类,为上层提供了统一的接口而且通过TTransport即可访问各个子类不同实现,类似多态。
相关推荐
标题中的"thrift-0.9.1.exe"和"thrift-0.9.2.exe"是Thrift框架的不同版本。这些文件是Windows平台上的可执行程序,用于生成与Thrift相关的代码。0.9.1和0.9.2分别代表了Thrift的两个发行版本,每个版本可能包含了新...
maven-thrift-plugin-0.1.11-sources.jar
maven-thrift-plugin-0.1.11.jar
maven插件 maven-thrift-plugin-0.1.10
"thrift-0.13.0.zip"这个压缩包包含了Thrift 0.13.0版本的源码和工具,用于生成Go语言的Thrift接口。Thrift IDL文件描述了HBase服务的接口,包括批量读写操作。批量操作在HBase中是非常重要的,因为它们可以显著提高...
"thrift-0.9.3.exe"是Thrift框架的一个特定版本(0.9.3)的可执行文件,主要用于Windows操作系统。这个文件在Thrift开发过程中扮演着至关重要的角色,它能帮助开发者将定义好的Thrift接口文件(.thrift)转换为不同...
【Laravel开发与Thrift-Laravel整合】 在现代Web应用开发中,Laravel作为一个流行的PHP框架,因其优雅的语法和强大的功能而备受开发者喜爱。Thrift则是一个跨语言的服务框架,由Facebook开源,用于实现高性能、可...
thrift开发时,将thrift文件自动生成java文件需要用到thrift-0.9.0.exe
在“thrift-0.13.0.tar.gz”这个压缩包中,包含了Thrift 0.13.0版本的相关源码、库文件和文档。 Thrift IDL是Thrift的关键组成部分,它允许开发者用类似C++或Java的语法定义数据类型和服务接口。例如,你可以定义一...
thrift开发时,将thrift文件自动生成java文件需要用到thrift-0.9.0.exe
Thrift-0.9.0是这个框架的一个版本,包含源代码,用户可以编译并根据需要在自己的项目中使用。 在Thrift的实现中,它首先定义了一种中间表示(IDL,Interface Description Language),允许开发者描述服务接口、...
【 Maven-Thrift-Server:构建Thrift服务的Maven实践】 在软件开发中,Thrift是一种高效的跨语言服务开发框架,由Facebook开发并开源。它允许定义数据类型和服务接口,然后自动生成各种编程语言的代码,使得不同...
标题"thrift-0.13.0在Windows上exe程序.rar"表明这个压缩包包含了Thrift 0.13.0版本的Windows可执行文件。这个版本可能包含了一些新特性、修复了已知问题,或者对性能进行了优化。在Windows环境下,.exe文件是可直接...
在"thrift-0.9.1.exe"和"thrift-0.9.2.exe"这两个版本中,主要包含了Thrift编译器和相关的库文件。编译器是一个命令行工具,用于将IDL文件转换为实际编程语言的代码。例如,你可以编写一个.thrift文件定义服务接口,...
银河麒麟高级服务器版v10系统的thrift-0.17.0及其依赖安装包
Thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, ...
【 Maven 和 Thrift 的结合:maven-thrift-client】 在软件开发中,Thrift 是一个强大的跨语言服务开发框架,由 Facebook 开发并开源。它允许开发者定义服务接口和服务数据类型,然后自动生成多种编程语言的客户端...
这个"thrift-0.9.3 修复版"是官方0.9.3版本的一个修正版本,旨在解决原版中存在的一些问题,特别是链接错误。这些错误可能影响到服务的稳定性和效率,修复后能提高开发者的体验和系统的可靠性。 Thrift 的核心功能...
【标题】"thrift-parser_2.9.1-2.0.0-M2.zip" 涉及到的是一个关于 Thrift 解析器的版本更新,2.9.1 到 2.0.0-M2。Thrift 是一个开源的软件框架,由Facebook开发,用于构建可伸缩的服务。它允许定义数据类型和服务...