(一)简介
传输层负责与网络通信相关的处理,包括监听连接请求、读写数据等。
(二)结构
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类
对于读:实际读取数据比实际请求的大很多,多余数据为将来超过缓存的数据服务
对于写:数据在被发送前先写入缓存
(四)总结
待续