kassane/beast
HTTP and WebSocket built on Boost.Asio in C++11 (uses zig build)
242b14bb690ca7b4f924b6dd35f397a2779813a3
faac048d59948b1990c0a8772a050d8e47279343
242fdfb1373127331cb229379b50b1dba0f53e49
5734e160e08b8df898c7f747000f27a3aafb7b2b
d0f3481b210a3baf49ce16d7b595ba5f4bee8ce6
821c53c0b45529dca508fadc7d018fb1bb6ece21
f0e109312cab295a660ae94b138cb5f8fc7d182f
6a573e4b8333ee63ee62ce95558c3667348db233
ee5285bfa64843a11e29700298c83a37e3132fcd
b37b709cbdb6b2c285fb808dab985aa005786351
0abef890ee04f041db43c381b1f8126ffa411bb1
c4ea7e40d365ba28faecef8917d5c3f1e0121bf9
1ddee6c39a7694af99a74fc08f24c242cbdd57ac
c973467a31949a3dd6c1908a4ec267ea635cab07
804767983fb6f77f8e0fd975f23d1facee6f224b
45eec41c293bc5cd36ec3ed83671f70bc1aadc9f
6ff2e5dca53fc50bef54ef3eeaaed83d35cbc061
37c9bddf0bdefaaae0ca5852c1a153d9fc43f278
44238d033e1503c694782925d647811380a067c2
b67941dd7d03536a854b96f001954792311ab515
9aca7f5b609a731106a6d70e8dca9a4196dca968
31de9279d826c8a6ae6126c0c4a8a32ea9f0edff
97776ec7ba6217ecdfb8fd777dec85117de6f188
4ea9c64316766590e297960f8b26bc04ac0af4d8
900fe18a117daa9ce023529b006f122ad4116749
0baa42f3280725f7dfee3d2f8e1f5e04267876ed
145778490c2d332c1411df6a5274a4b53ec3e091
8421c07517a0ae81bffce34689dc7540b4a4ff67
1650077eee2c62d05d9deeff06a75c058648101a
bff5cb65a5cb9151aacaf56abe80125e0128f43a
5d5ecb74a7eabbc7968a6a7d8dcf17c291649105
c5fb9c86e8b9ea460fc6d7255d15d69d4d2705ae
baff1cb7ff99f0c5d8f741f9dbacdb76bf603877
342e4c6d10d586058818daa84201a2d301357a53
cb559132939670aa45eb25fd867fce0be8b08837
f9bdafd3ca0f5025012f60a405b559888513a9be
39714907b7d32ed8f005b5a01d1c2b885b5717b3
7af69375f5ad95cc80411b7f75365c9ab44ad6c0
e66cd6bc3fdba37b31440e013d026a10e26ca486
50a1eae942effb0a9b90724323ef8f2a67e7984a
5ad7df63cd792fbdb801d600b93cad1a432f0151
Branch | Linux / Windows | Coverage | Documentation | Matrix |
---|---|---|---|---|
master | ||||
develop |
Beast is a C++ header-only library serving as a foundation for writing interoperable networking libraries by providing low-level HTTP/1, WebSocket, and networking protocol vocabulary types and algorithms using the consistent asynchronous model of Boost.Asio.
This library is designed for:
Symmetry: Algorithms are role-agnostic; build clients, servers, or both.
Ease of Use: Boost.Asio users will immediately understand Beast.
Flexibility: Users make the important decisions such as buffer or thread management.
Performance: Build applications handling thousands of connections or more.
Basis for Further Abstraction. Components are well-suited for building upon.
CppCon 2018 | Bishop Fox 2018 |
---|---|
CppCon 2017 | CppCast 2017 | CppCon 2016 |
---|---|---|
This software is in its first official release. Interfaces may change in response to user feedback. For recent changes see the CHANGELOG.
This library is for programmers familiar with Boost.Asio. Users who wish to use asynchronous interfaces should already know how to create concurrent network programs using callbacks or coroutines.
When using Microsoft Visual C++, Visual Studio 2017 or later is required.
One of these components is required in order to build the tests and examples:
Beast is header-only. To use it just add the necessary #include
line
to your source files, like this:
#include <boost/beast.hpp>
If you use coroutines you'll need to link with the Boost.Coroutine library. Please visit the Boost documentation for instructions on how to do this for your particular build system.
To use the latest official release of Beast, simply obtain the latest Boost distribution and follow the instructions for integrating it into your development environment. If you wish to build the examples and tests, or if you wish to preview upcoming changes and features, it is suggested to clone the "Boost superproject" and work with Beast "in-tree" (meaning, the libs/beast subdirectory of the superproject).
The official repository contains the following branches:
master This holds the most recent snapshot with code that is known to be stable.
develop This holds the most recent snapshot. It may contain unstable code.
Each of these branches requires a corresponding Boost branch and all of its subprojects. For example, if you wish to use the master branch version of Beast, you should clone the Boost superproject, switch to the master branch in the superproject and acquire all the Boost libraries corresponding to that branch including Beast.
To clone the superproject locally, and switch into the main project's directory use:
git clone --recursive https://github.com/boostorg/boost.git
cd boost
"bjam" is used to build Beast and the Boost libraries. On a non-Windows system use this command to build bjam:
./bootstrap.sh
From a Windows command line, build bjam using this command:
.\BOOTSTRAP.BAT
Building tests and examples requires OpenSSL installed. If OpenSSL is installed
in a non-system location, you will need to copy the
user-config.jam file into your home directory and set
the OPENSSL_ROOT
environment variable to the path that contains an installation
of OpenSSL.
If installed into a system directory, OpenSSL will be automatically found and used.
sudo apt install libssl-dev
Replace path
in the following code snippets with the path you installed vcpkg
to. Examples assume a 32-bit build, if you build a 64-bit version replace
x32-windows
with x64-windows
in the path.
vcpkg install openssl --triplet x32-windows
SET OPENSSL_ROOT=path\installed\x32-windows
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
Using 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
Make sure the bjam tool (also called "b2") is available in the path your shell uses to find executables. The Beast project is located in "libs/beast" relative to the directory containing the Boot superproject. To build the Beast tests, examples, and documentation use these commands:
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
Additional instructions for configuring, using, and building libraries in superproject may be found in the Boost Wiki.
CMake may be used to generate a very nice Visual Studio solution and a set of Visual Studio project files using these commands:
cd libs/beast
mkdir bin
cd bin
cmake -G "Visual Studio 17 2022" -A Win32 .. # for 32-bit Windows builds, or
cmake -G "Visual Studio 17 2022" -A x64 .. # for 64-bit Windows builds
The files in the repository are laid out thusly:
./
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
These examples are complete, self-contained programs that you can build
and run yourself (they are in the example
directory).
https://www.boost.org/doc/libs/develop/libs/beast/doc/html/beast/quick_start.html
Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt)
Please report issues or questions here: https://github.com/boostorg/beast/issues
If you would like to contribute to Beast and help us maintain high quality, consider performing code reviews on active pull requests. Any feedback from users and stakeholders, even simple questions about how things work or why they were done a certain way, carries value and can be used to improve the library. Code review provides these benefits:
You can look through the Closed pull requests to get an idea of how reviews are performed. To give a code review just sign in with your GitHub account and then add comments to any open pull requests below, don't be shy!
https://github.com/boostorg/beast/pulls
Here are some resources to learn more about code reviews:
Beast thrives on code reviews and any sort of feedback from users and stakeholders about its interfaces. Even if you just have questions, asking them in the code review or in issues provides valuable information that can be used to improve the library - do not hesitate, no question is insignificant or unimportant!