thrift之TTransport层的分帧传输类TFramedTransport

TFramedTransport是Thrift中按照固定帧大小进行数据传输的类,它先在内存中缓存数据,直到flush操作时,将数据长度和有效载荷一起发送。在读取时,先读取帧头获取长度,再读取相应长度的数据。文章详细介绍了其读取、写入和刷新操作的实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        帧传输类就是按照一帧的固定大小来传输数据,所有的写操作首先都是在内存中完成的直到调用了flush操作,然后传输节点在flush操作之后将所有数据根据数据的有效载荷写入数据的长度的二进制块发送出去,允许在接收的另一端按照固定的长度来读取。
  帧传输类同样还是从缓存基类TBufferBase继承而来,实现的接口当然也基本相同,只是实现的方式不同而已,下面就来看看具体的实现过程和原理。
  这个类所采用的默认缓存长度是512(static const int DEFAULT_BUFFER_SIZE = 512;),两个基本构造函数一个采用默认的缓存长度,另一个可以指定一个需要的缓存长度。下面还是重点分析慢读、读帧等操作的实现过程:
  (1)慢读实现如下:
  uint32_t TFramedTransport::readSlow(uint8_t* buf, uint32_t len) {
    uint32_t want = len;//想要读取的长度
    uint32_t have = rBound_ - rBase_;//内存缓存中已经有的数据的长度
    assert(have < want);//如果以后数据长度满足需要读的长度就不需要采用慢读
  
    // 如果我们有一些数据在缓存,拷贝出来并且返回它。
    // 我们没有试图读取更多的数据而是不得不返回它,
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蔷薇理想人生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值