Boost
arrow_drop_down
Boost.Beast
M
D
C++ 11 新增于 Boost 1.66.0
分类:   并发IO

仅使用 C++11 和 Boost.Asio 的可移植 HTTP、WebSocket 和网络操作

本次发布

Vinnie Falco
Vinnie Falco
作者
Mohammad Nejati
Mohammad Nejati
维护者
Yuhan Liu
贡献者 - 新
Danijel Zlaus
贡献者 - 新
Davin
贡献者 - 新
DockedFerret800
贡献者 - 新

依赖项

Boost.Beast Title

基于 Boost.Asio 的 C++11 HTTP 和 WebSocket

分支 Linux / Windows 覆盖率 文档 矩阵
master Build Status codecov Documentation Matrix
develop Build Status codecov Documentation Matrix

目录

介绍

Beast 是一个仅头文件库,通过提供低级 HTTP/1、WebSocket 和网络协议词汇类型以及使用 Boost.Asio 的一致异步模型实现的算法,作为编写可互操作网络库的基础。

该库专为

  • 对称性:算法是角色无关的;可以构建客户端、服务器或两者兼有。

  • 易用性:Boost.Asio 用户将立即理解 Beast。

  • 灵活性:用户做出重要决定,例如缓冲区或线程管理。

  • 性能:构建处理数千甚至更多连接的应用程序。

  • 进一步抽象的基础。组件非常适合在此基础上进行构建。

外观

CppCon 2018 Bishop Fox 2018
Beast Beast Security Review
CppCon 2017 CppCast 2017 CppCon 2016
Beast Vinnie Falco Beast

描述

此软件处于首次正式发布阶段。接口可能会因用户反馈而更改。有关最新更改,请参阅 更改日志

要求

本库适用于熟悉 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 超级项目”并在“项目内部”使用 Beast(即,超级项目中的 libs/beast 子目录)。

官方存储库包含以下分支:

  • master 包含已知稳定的最新代码快照。

  • develop 包含最新的快照。它可能包含不稳定的代码。

这些分支中的每一个都需要一个相应的 Boost 分支及其所有子项目。例如,如果您想使用 Beast 的 master 分支版本,您应该克隆 Boost 超级项目,在超级项目中切换到 master 分支,并获取与该分支对应的所有 Boost 库,包括 Beast。

要本地克隆超级项目,并进入主项目目录,请使用:

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 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.exe install openssl --triplet x32-windows
export OPENSSL_ROOT=path/x32-windows

Mac OS

使用 brew

brew install openssl
export OPENSSL_ROOT=$(brew --prefix openssl)
# install bjam tool user specific configuration file to read OPENSSL_ROOT
# see 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 must be in your $PATH
b2 -j2 libs/beast/example cxxstd=11   # "-j2" means use two processors
b2 libs/beast/doc                     # Doxygen and Saxon are required for this

有关配置、使用和在超级项目中构建库的更多说明,请参阅 Boost Wiki

Visual Studio

可以使用 CMake 使用以下命令生成非常好的 Visual Studio 解决方案和一组 Visual Studio 项目文件:

cmake -G "Visual Studio 17 2022" -A win32 -B bin -DCMAKE_TOOLCHAIN_FILE="C:/vcpkg/scripts/buildsystems/vcpkg.cmake" -DVCPKG_CHAINLOAD_TOOLCHAIN_FILE="C:/boost/libs/beast/cmake/toolchains/msvc.cmake"

cmake -G "Visual Studio 17 2022" -A x64 -B bin64 -DCMAKE_TOOLCHAIN_FILE="C:/vcpkg/scripts/buildsystems/vcpkg.cmake" -DVCPKG_CHAINLOAD_TOOLCHAIN_FILE="C:/boost/libs/beast/cmake/toolchains/msvc.cmake"

存储库中的文件布局如下:

./
    bin/            Create this to hold executables and project files
    bin64/          Create this to hold 64-bit Windows executables and project files
    doc/            Source code and scripts for the documentation
    include/        Where the header files are located
    example/        Self contained example programs
    meta/           Metadata for Boost integration
    test/           The unit tests for Beast
    tools/          Scripts used for CI testing

用法

这些示例是完整、独立的程序,您可以自行构建和运行(它们位于 example 目录中)。

https://boost.ac.cn/doc/libs/latest/libs/beast/doc/html/beast/quick_start.html

License

根据 Boost 软件许可证 1.0 版分发。(请参阅随附的 LICENSE_1_0.txt 文件或访问 https://boost.ac.cn/LICENSE_1_0.txt)

联系方式

请在此处报告问题或疑问:https://github.com/boostorg/beast/issues


贡献(我们需要您的帮助!)

如果您想为 Beast 做出贡献并帮助我们保持高质量,请考虑对活动的拉取请求进行代码审查。用户和利益相关者的任何反馈,即使是关于工作原理或为何以某种方式完成的简单问题,都具有价值,可用于改进库。代码审查提供这些好处:

  • 识别错误
  • 文档校对
  • 调整接口以适应用例
  • 简化代码

您可以查看已关闭的拉取请求,以了解代码审查是如何进行的。要进行代码审查,只需使用您的 GitHub 帐户登录,然后在下面的任何打开的拉取请求中添加评论,不要害羞!

https://github.com/boostorg/beast/pulls

以下是一些学习代码审查的资源:

Beast 的发展离不开代码审查和来自用户及利益相关者对其接口的任何形式的反馈。即使您只是有疑问,在代码审查或问题中提问也能提供有价值的信息,可用于改进库——请不要犹豫,没有问题是不重要或不相关的!

全部时间

Richard Hodges
Richard Hodges
贡献者
Damian Jarek
Damian Jarek
贡献者
Klemens Morgenstern
Klemens Morgenstern
贡献者
sdarwin
sdarwin
贡献者
Alan de Freitas
Alan de Freitas
贡献者
Christopher Kohlhoff
Christopher Kohlhoff
贡献者
sehe
sehe
贡献者
Peter Dimov
Peter Dimov
贡献者
Glen Fernandes
Glen Fernandes
贡献者
AeroStun
AeroStun
贡献者
Mika Fischer
Mika Fischer
贡献者
Rene Rivera
Rene Rivera
贡献者
Denis Glazachev
Denis Glazachev
贡献者
Brett Robinson
Brett Robinson
贡献者
Cristian Morales Vega
Cristian Morales Vega
贡献者
Evan Lenz
Evan Lenz
贡献者
Ed Tanous
Ed Tanous
贡献者
Hreniuc Cristian-Alexandru
贡献者
Edward Diener
Edward Diener
贡献者
Ed Catmur
Ed Catmur
贡献者
Eelis van der Weegen
Eelis van der Weegen
贡献者
Peter Jankuliak
Peter Jankuliak
贡献者
Paul "TBBle" Hampson
Paul "TBBle" Hampson
贡献者
Konstantin Podsvirov
Konstantin Podsvirov
贡献者
compmaniak
compmaniak
贡献者
Edward Nolan
Edward Nolan
贡献者
Daniela Engert
Daniela Engert
贡献者
Dirk Stolle
Dirk Stolle
贡献者
Anefu
Anefu
贡献者
Benjamin Roland Buch
Benjamin Roland Buch
贡献者
Benjamin Buch
Benjamin Buch
贡献者
Boris Sergeev
Boris Sergeev
贡献者
tal
tal
贡献者
Wes Turner
Wes Turner
贡献者
Nuno Goncalves
Nuno Goncalves
贡献者
Daniel Sewtz
Daniel Sewtz
贡献者
Johan Rönnkvist
Johan Rönnkvist
贡献者
Filip Matzner
Filip Matzner
贡献者
Mohamed El Housseine
Mohamed El Housseine
贡献者
snoe925
snoe925
贡献者
Mike Ellery
Mike Ellery
贡献者
Xiaofeng Wang
Xiaofeng Wang
贡献者
Michael Haubenschild
Michael Haubenschild
贡献者
dmorilha-twilio
dmorilha-twilio
贡献者
KnoerleMan
KnoerleMan
贡献者
mxp
mxp
贡献者
ShuangLiu1992
ShuangLiu1992
贡献者
Martijn Otto
Martijn Otto
贡献者
vm2mv
vm2mv
贡献者
Greg Glover
贡献者
Mojca Miklavec
Mojca Miklavec
贡献者
Utsav Munendra
Utsav Munendra
贡献者
Petre Pircalabu
Petre Pircalabu
贡献者
JackyYin
JackyYin
贡献者
Liviu Andron
Liviu Andron
贡献者
Daniel Engelke
Daniel Engelke
贡献者
oerol
oerol
贡献者
Edward Nolan
Edward Nolan
贡献者
Fernando Pelliccioni
Fernando Pelliccioni
贡献者
Shukant Pal
Shukant Pal
贡献者
Michiel De Witte
Michiel De Witte
贡献者
yhzx233
yhzx233
贡献者
Johannes Wilde
Johannes Wilde
贡献者
Mikhail Khachayants
Mikhail Khachayants
贡献者
Alexander Kernozhitsky
Alexander Kernozhitsky
贡献者
Orgad Shaneh
Orgad Shaneh
贡献者
Ruslan Zakirov
Ruslan Zakirov
贡献者
Saleh Hatefinya
Saleh Hatefinya
贡献者
Jeremiah Rodriguez
Jeremiah Rodriguez
贡献者
Simon Ebner
Simon Ebner
贡献者
Alexey Romko
贡献者
Daniel James
Daniel James
贡献者
Morten Minde Neergaard
贡献者
luz.paz
luz.paz
贡献者
Alexander Grund
Alexander Grund
贡献者
Nikita Kniazev
Nikita Kniazev
贡献者
Akira Takahashi
Akira Takahashi
贡献者
Giovanni Mascellani
Giovanni Mascellani
贡献者
Christos Stratopoulos
Christos Stratopoulos
贡献者
Gudmundur Adalsteinsson
Gudmundur Adalsteinsson
贡献者
Tocic
Tocic
贡献者
zerotypos-found
zerotypos-found
贡献者
Andrey Semashev
Andrey Semashev
贡献者
Gregor Jasny
Gregor Jasny
贡献者
Aurelien Chartier
Aurelien Chartier
贡献者
Nik Bougalis
Nik Bougalis
贡献者
Dmitry Arkhipov
Dmitry Arkhipov
贡献者
msuvajac
msuvajac
贡献者
slowriot
slowriot
贡献者
Roel Standaert
Roel Standaert
贡献者
Georg Gast
Georg Gast
贡献者
Mateusz Łoskot
Mateusz Łoskot
贡献者
Jason Rice
Jason Rice
贡献者
Ivan Vilata-i-Balaguer
Ivan Vilata-i-Balaguer
贡献者
p-kalugin
p-kalugin
贡献者
felixguendling
贡献者
Joe Loser
Joe Loser
贡献者
Pierre Zawadil
Pierre Zawadil
贡献者
cos-public
cos-public
贡献者
Arvid Norberg
Arvid Norberg
贡献者
jarle
jarle
贡献者
Domen Vrankar
Domen Vrankar
贡献者
PeterW3
贡献者