zoukankan      html  css  js  c++  java
  • 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类

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

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

    (四)总结

    待续

  • 相关阅读:
    VS2008编写MFC程序--使用opencv2.4()
    November 02nd, 2017 Week 44th Thursday
    November 01st, 2017 Week 44th Wednesday
    October 31st, 2017 Week 44th Tuesday
    October 30th, 2017 Week 44th Monday
    October 29th, 2017 Week 44th Sunday
    October 28th, 2017 Week 43rd Saturday
    October 27th, 2017 Week 43rd Friday
    October 26th, 2017 Week 43rd Thursday
    October 25th, 2017 Week 43rd Wednesday
  • 原文地址:https://www.cnblogs.com/taoxinrui/p/5903580.html
Copyright © 2011-2022 走看看