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类

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

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

(四)总结

待续

转载于:https://www.cnblogs.com/taoxinrui/p/5903580.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值