asio的buffer

ASIO的buffer理解

asio的buffer结构

任何网络库都有提供buffer的数据结构,这个就是收发数据的缓冲区。

asio提供了mutable_buffer 和 const_buffer这两个结构,他们都是一段连续的空间,首字节存储了后续数据的长度。mutable_buffer用于写服务,const_buffer用于读服务。但是这两个结构都没有直接的api可以调用。asio提出了MutableBufferSequence和ConstBufferSequence的概念,他们是由多个mutable_buffer和const_buffer组成的。我们可以理解为MutableBufferSequence的数据结构为vector<mutable_buffer>,结构如下

image-20240921222731672

如图所示每个vector存储的都是mutable_buffer的地址,这么复杂的数据结构交给用户使用显然是不合适的,因此asio提出了buffer函数,该函数接收多种形式的字节流,返回mutable_buffers_1 或者const_buffers_1结构的对象。const_buffers_1和mutable_buffers_1是mutable_buffer和const_buffer的适配器,提供了符合MutableBufferSequence和ConstBufferSequence概念的接口,所以他们可以作为asio的api函数的参数使用。

简单概括一下,我们可以用buffer()函数生成我们要用的缓存存储数据。
比如boost的发送接口send要求的参数为ConstBufferSequence类型,我们发送"hello world"字符串时,我们需要将”Hello Word转化为该类型”,最终buffer函数返回的就是可以传递给发送接口send的类型。

posted @ 2024-09-21 22:45  桂洛克船长  阅读(65)  评论(0)    收藏  举报