本章主要介绍Thrift的传输层功能的实现,传输的方式多种多样,可以采用压缩、分帧等,而这些 功能的实现都是相互独立,和上一章介绍的协议类实现方式比较雷同,还是先看看这部分的类关系图, 如下:
由上面的类关系图可以看出,这部分的功能是相当的强大,所以类比较多且关系错综复杂。但是如 果理解清楚了这些类直接的关系就很容易掌握这部分的实现技术和这部分实现的功能。我们把这个类关 系图分为三部分来看,第一部分看抽象基类TTransport类,它是所有传输类的基类,有很大一部分类直 接从它继承实现它提供或者说定义的接口函数(纯虚函数),这些传输类功能比较单一实现也比较简单 ;第二部分就是TTransport抽象类的默认实现和相应的子类以及加了一层虚拟传输类,这个传输虚拟类 的类继承框架个上一章的协议类虚拟继承框架是相同的实现方案和技术,这样实现可以避免采用虚拟继 承方式,因为虚拟继承效率会比较低一些,虚拟继承需要动态绑定技术(运行时去查找和指定具体的实 现);第三部分就是各种传输类的对象生成工厂类,负责某一种具体传输类对象的生产。
第一节 抽 象基类TTransport
本节介绍的是整个传输层实现的抽象概述,传输层实现的接口都在这个抽象基类 中定义。下面看看传输层都实现了哪些接口?
1.辅助传输层的全局模板函数readAll
在开始分析 传输层的接口以前先看一个辅助模板函数readAll,它的定义和实现如下:
template <class Transport_> uint32_t readAll(Transport_ &trans, uint8_t* buf, uint32_t len) { uint32_t have = 0; uint32_t get = 0; while (have < len) { get = trans.read(buf+have, len-have);//通过具体的传输类读取剩余的需要读取的数据 if (get <= 0) {//处理数据以读完异常 throw TTransportException(TTransportException::END_OF_FILE, "No more data to read."); } have += get;//已经读取的字节数 } return have;//返回读到的字节数 }
这个函数现实比较简单,就是通过一个while循环来保证需要读取的字节数能够读完, 如果字节数不够就会抛出异常。
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索接口
, 函数
, 抽象
, 传输
, thrift
, 功能
, 抽象虚拟类
, 传输源码
, 数据库抽象层
抽象层
thrift ttransport、抽象基类、c 抽象基类、虚基类和抽象类、虚基类 抽象类,以便于您获取更多的相关知识。