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类

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

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

    (四)总结

    待续

  • 相关阅读:
    那些离不开的 Chrome 扩展插件
    Spring Boot 实战 —— 入门
    Maven 学习笔记
    Linux lvm 分区知识笔记
    Linux 双向 SSH 免密登录
    CentOS Yum 源搭建
    Ubuntu 系统学习
    iOS 测试三方 KIF 的那些事
    Swift 网络请求数据与解析
    iOS Plist 文件的 增 删 改
  • 原文地址:https://www.cnblogs.com/taoxinrui/p/5903580.html
Copyright © 2011-2022 走看看