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类

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

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

    (四)总结

    待续

  • 相关阅读:
    UVa 11538 Chess Queen (排列组合计数)
    CodeForces 730H Delete Them (暴力)
    CodeForces 730G Car Repair Shop (暴力)
    汇编(assembling)简介(源:阮一峰)
    CSS骚操作
    Jquery复习总结
    CGI与ISAPI的区别(转)
    SQL中Group By的使用(转)
    05 ADO.net
    04 SqlServer
  • 原文地址:https://www.cnblogs.com/taoxinrui/p/5903580.html
Copyright © 2011-2022 走看看