【注】Beast是Boost中关于http(s)/websocket(s)的库,首发于boost 1.66(2016年),是比较新的库,它主要包含了http、websocket协议的解析(反序列化)和封装(序列化)以及关于网络的操作,它以asio为基础,但似乎又想隔离Asio。本文不是关于beast的全面描述,只涉及一些要点,主要资料来源于beast官方文档和实现代码。本文对应boost 的版本为1.73。
一、Beast中的Buffer
1.概念
软件程序中,缓存区是被广泛应用的概念。Beast中的缓存区大多来自于Asio,DynamicBuffer是指由大小可变的缓存区域,根据不同内存方式,有三种形态:
- 一块连续内存,大小可变
- 多块内存,每块大小相同,可添加块
- 多块内存,每块大小不同,可添加块
BufferSequence其实是一个容器,将若干内存类包装起来(一般用双向链表),本身只提供遍历操作就可以了,它又分为可写的MutableBufferSequence和只读的ConstBufferSequence。MutableBufferSequence用于接收过程(即从网络接收到字节流,写入缓存),ConstBufferSequence可用于发送过程(即读出缓存区中已生成的字节流,发送到网络)。
Asio实现了两个“轻量级”的内