thrift(三) - transport传输层

(一)简介

传输层负责与网络通信相关的处理,包括监听连接请求、读写数据等。

(二)结构

TTransport是所有传输类的基类,提供抽象接口。

TTransportDefaults是默认的传输类,提供了基类TTransport的默认实现(并没有真正实现)。

TVirtualTransport为TTransport类的子类提供多态,用来定义自己的传输类。

TSocket是阻塞套接字IO传输类,基于TCP socket实现具体传输功能,实现TTransport接口。

TBufferBase为缓冲基类,需要实现缓存功能的类直接从这个基类继承,通过为传输类提供缓存提高兴农网。

TBufferedTransport为缓冲传输类,从缓冲基类继承而来,提供带缓存的数据传输。

(三)实现

TSocket类

真正负责数据传输的类,基于TCP Socket实现了TTransport接口。

open()  ->  打开连接,connect创建连接

read()   ->  接收数据,recv接收数据,处理各种异常

EAGAIN(unavailable resources):重试次数超过

EAGAIN(timed out):超时

write()   ->  发送数据,数据可能不能在一次send发送完,循环调用send发送数据

各种异常:

EWOULDBLACK -> 阻塞错误 -> 直接返回

EAGAIN -> 阻塞错误 -> 直接返回

EPIPE、ECONNRESET、ENOTCONN -> 连接错误 -> 关闭连接

TBufferBase类

让传输类所有的读、写函数都提供缓存来提高性能。

采用memcpy来设计和实现快路径的读、写访问操作,且都是非虚拟、内联的小代码量函数。

TBufferBase是一个抽象基类,子类必须自己实现慢路径的读、写函数,慢路径的函数在缓存慢的情况下执行。

TBufferedTransport类

对于读:实际读取数据比实际请求的大很多,多余数据为将来超过缓存的数据服务

对于写:数据在被发送前先写入缓存

(四)总结

待续

posted @ 2016-10-09 16:53  小树桩的朋友  阅读(2113)  评论(0编辑  收藏  举报