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>,结构如下
如图所示每个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的类型。