基于 C++11 的 Boost.Asio 构建的 HTTP 和 WebSocket
目录
简介
Beast 是一个 C++ 仅头文件库,作为编写可互操作网络库的基础,通过使用 Boost.Asio 一致的异步模型提供低级 HTTP/1、WebSocket 和网络协议词汇类型和算法。
该库设计用于:
-
对称性: 算法与角色无关;可构建客户端、服务器或两者。
-
易用性: Boost.Asio 用户将立即理解 Beast。
-
灵活性: 用户可以做出重要决策,如缓冲区或线程管理。
-
性能: 构建可处理数千个或更多连接的应用程序。
-
进一步抽象的基础: 组件非常适合用于构建。
亮相
CppCon 2018 | Bishop Fox 2018 |
---|---|
CppCon 2017 | CppCast 2017 |
------------ | ------------ |
描述
这个软件正处于首次官方发布阶段。接口可能会根据用户反馈进行调整。最近的更改请查看更新日志。
要求
这个库面向熟悉Boost.Asio的程序员。希望使用异步接口的用户应该已经知道如何使用回调或协程创建并发网络程序。
- C++11: 对大多数语言特性提供强大支持。
- Boost: Boost.Asio和Boost的其他部分。
- OpenSSL: 使用TLS/安全套接字和示例/测试时需要。
使用Microsoft Visual C++时,需要Visual Studio 2017或更高版本。
构建测试和示例需要以下组件之一:
- 正确配置的bjam/b2
- CMake 3.5.1或更高版本(仅限Windows)
构建
Beast是仅头文件的库。要使用它,只需在源文件中添加必要的#include
行,如下所示:
#include <boost/beast.hpp>
如果使用协程,需要链接Boost.Coroutine库。请参阅Boost文档,了解如何在特定构建系统中完成此操作的说明。
GitHub
要使用Beast的最新官方发布版本,只需获取最新的Boost发行版,并按照说明将其集成到您的开发环境中。如果您希望构建示例和测试,或者想预览即将推出的更改和功能,建议克隆"Boost超级项目"并在树内(即超级项目的libs/beast子目录)使用Beast。
官方仓库包含以下分支:
每个分支都需要相应的Boost分支及其所有子项目。例如,如果您希望使用Beast的master分支版本,应该克隆Boost超级项目,切换到超级项目的master分支,并获取包括Beast在内的所有对应该分支的Boost库。
要在本地克隆超级项目并切换到主项目目录,请使用:
git clone --recursive https://github.com/boostorg/boost.git
cd boost
"bjam"用于构建Beast和Boost库。在非Windows系统上,使用以下命令构建bjam:
./bootstrap.sh
在Windows命令行中,使用以下命令构建bjam:
.\BOOTSTRAP.BAT
构建测试和示例
构建测试和示例需要安装OpenSSL。如果OpenSSL安装在非系统位置,您需要将user-config.jam文件复制到您的主目录,并将OPENSSL_ROOT
环境变量设置为包含OpenSSL安装的路径。
Ubuntu/Debian
如果安装到系统目录中,OpenSSL将会被自动找到并使用。
sudo apt install libssl-dev
Windows
在以下代码片段中,将 path
替换为你安装 vcpkg 的路径。示例假设是32位构建,如果你构建64位版本,请将路径中的 x32-windows
替换为 x64-windows
。
- 使用 vcpkg 和 CMD:
vcpkg install openssl --triplet x32-windows
SET OPENSSL_ROOT=path\installed\x32-windows
- 使用 vcpkg 和 PowerShell:
vcpkg install openssl --triplet x32-windows
$env:OPENSSL_ROOT = "path\x32-windows"
- 使用 vcpkg 和 bash:
vcpkg.exe install openssl --triplet x32-windows
export OPENSSL_ROOT=path/x32-windows
Mac OS
使用 brew:
brew install openssl
export OPENSSL_ROOT=$(brew --prefix openssl)
# 安装bjam工具用户特定配置文件以读取OPENSSL_ROOT
# 参见 https://www.bfgroup.xyz/b2/manual/release/index.html
cp ./libs/beast/tools/user-config.jam $HOME
确保bjam工具(也称为"b2")在你的shell用于查找可执行文件的路径中可用。Beast项目位于包含Boot超级项目的目录相对的"libs/beast"中。要构建Beast测试、示例和文档,请使用以下命令:
export PATH=$PWD:$PATH
b2 -j2 libs/beast/test cxxstd=11 # bjam必须在你的$PATH中
b2 -j2 libs/beast/example cxxstd=11 # "-j2"表示使用两个处理器
b2 libs/beast/doc # 这需要Doxygen和Saxon
有关配置、使用和构建超级项目中的库的其他说明,可以在Boost Wiki中找到。
Visual Studio
可以使用CMake生成非常好的Visual Studio解决方案和一组Visual Studio项目文件,使用以下命令:
cd libs/beast
mkdir bin
cd bin
cmake -G "Visual Studio 17 2022" -A Win32 .. # 用于32位Windows构建,或
cmake -G "Visual Studio 17 2022" -A x64 .. # 用于64位Windows构建
存储库中的文件布局如下:
./
bin/ 创建此目录以存放可执行文件和项目文件
bin64/ 创建此目录以存放64位Windows可执行文件和项目文件
doc/ 文档的源代码和脚本
include/ 头文件所在位置
example/ 独立的示例程序
meta/ 用于Boost集成的元数据
test/ Beast的单元测试
tools/ 用于CI测试的脚本
使用
这些示例是完整的、独立的程序,你可以自己构建和运行(它们位于example
目录中)。
https://www.boost.org/doc/libs/develop/libs/beast/doc/html/beast/quick_start.html
许可证
根据Boost软件许可证1.0版分发。 (见附带的LICENSE_1_0.txt文件或复制自 https://www.boost.org/LICENSE_1_0.txt)
联系
请在此报告问题或提出问题: https://github.com/boostorg/beast/issues
贡献(我们需要你的帮助!)
如果你想为Beast做出贡献并帮助我们保持高质量,请考虑对活跃的拉取请求进行代码审查。来自用户和利益相关者的任何反馈,即使是关于事物如何运作或为什么以某种方式完成的简单问题,都具有价值,可用于改进库。代码审查提供以下好处:
- 识别bug
- 文档校对
- 调整接口以适应用例
- 简化代码
你可以查看已关闭的拉取请求,了解如何进行审查。要进行代码审查,只需用你的GitHub账户登录,然后在下面的任何开放拉取请求中添加评论,不要害羞!
https://github.com/boostorg/beast/pulls
以下是一些学习更多关于代码审查的资源:
- 10大拉取请求审查错误
- 同行代码审查的最佳秘诀(PDF)
- 同行代码审查的11个最佳实践(PDF)
- 代码审查清单 – 如何进行有效的代码审查
- 代码审查指南
- C++核心指南
- C++编码标准(Sutter & Alexandrescu)
Beast非常重视代码审查以及来自用户和利益相关者对其接口的任何反馈。即使你只是有问题,在代码审查或问题中提出这些问题也能提供宝贵的信息,这些信息可用于改进库 - 请不要犹豫,没有哪个问题是微不足道或不重要的!