RPC设计--应用层缓冲区,TcpBuffer

为什么需要应用层的buffer

  1. 为了方便数据处理,从fd上直接读写然后做包的组装、拆解不够方便
  2. 方便异步发送,将数据写到应用层buffer后即可返回,让epoll即event_loop去异步发送。
  3. 提高发送效率,多个小包可合并发送

buffer 设计

可以直接使用一个vectoc< char>作为buffer, 需要标记读索引,写索引。
在这里插入图片描述

提供writeToBuffer接口,当用数据写入时,将数据从write_index位置向后写,如果缓存空间不够,需要进行扩容,写完数据后,需要增加write_index对应的字节数。

提供readFromBuffer接口,从读索引位置开始读数据,读完指定的字节数后,判断是否需要进行读写索引的调整,因为这里不是环形缓冲区,当写入数据,读出来后,buffer前面的空间已经可用了,但是读写索引都指向了靠后的位置,导致可写空间不够。

可提供可读字节数、可写字节数等接口

参考代码:
https://github.com/LIMengjie1/rocketrpc/tree/main/rocket/net/tcp
参考其中的tcpbuffer.cpp/h

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值