245 lines
9.4 KiB
Plaintext
245 lines
9.4 KiB
Plaintext
[/
|
|
Copyright (c) 2016-2019 Vinnie Falco (vinnie dot falco at gmail dot com)
|
|
|
|
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
|
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
|
|
|
Official repository: https://github.com/boostorg/beast
|
|
]
|
|
|
|
[section Examples]
|
|
[block'''<?dbhtml stop-chunking?>''']
|
|
|
|
Source code and build scripts for these programs are located
|
|
in the [path_link example example] directory.
|
|
|
|
[/-----------------------------------------------------------------------------]
|
|
|
|
[section Clients]
|
|
|
|
These HTTP clients submit a GET request to a server specified on the command
|
|
line, and prints the resulting response. The crawl client asynchronously
|
|
fetches the document root of the 10,000 top ranked domains, this may be
|
|
used to evaluate robustness. All asynchronous clients support timeouts.
|
|
|
|
[table
|
|
[[Description] [Source File] [Source File (using SSL)]]
|
|
[
|
|
[HTTP, synchronous]
|
|
[[path_link example/http/client/sync/http_client_sync.cpp http_client_sync.cpp]]
|
|
[[path_link example/http/client/sync-ssl/http_client_sync_ssl.cpp http_client_sync_ssl.cpp]]
|
|
][
|
|
[HTTP, asynchronous]
|
|
[[path_link example/http/client/async/http_client_async.cpp http_client_async.cpp]]
|
|
[[path_link example/http/client/async-ssl/http_client_async_ssl.cpp http_client_async_ssl.cpp]]
|
|
][
|
|
[HTTP, asynchronous using __system_executor__]
|
|
[]
|
|
[[path_link example/http/client/async-ssl-system-executor/http_client_async_ssl_system_executor.cpp http_client_async_ssl_system_executor.cpp]]
|
|
][
|
|
[HTTP, coroutine]
|
|
[[path_link example/http/client/coro/http_client_coro.cpp http_client_coro.cpp]]
|
|
[[path_link example/http/client/coro-ssl/http_client_coro_ssl.cpp http_client_coro_ssl.cpp]]
|
|
][
|
|
[HTTP crawl (asynchronous)]
|
|
[[path_link example/http/client/crawl/http_crawl.cpp http_crawl.cpp]]
|
|
[]
|
|
]]
|
|
|
|
These WebSocket clients connect to a
|
|
server and send a message, then receive a message and print the response
|
|
before disconnecting. All asynchronous clients support timeouts.
|
|
|
|
[table
|
|
[[Description] [Source File] [Source File (using SSL)]]
|
|
[
|
|
[WebSocket, synchronous]
|
|
[[path_link example/websocket/client/sync/websocket_client_sync.cpp websocket_client_sync.cpp]]
|
|
[[path_link example/websocket/client/sync-ssl/websocket_client_sync_ssl.cpp websocket_client_sync_ssl.cpp]]
|
|
][
|
|
[WebSocket, asynchronous]
|
|
[[path_link example/websocket/client/async/websocket_client_async.cpp websocket_client_async.cpp]]
|
|
[[path_link example/websocket/client/async-ssl/websocket_client_async_ssl.cpp websocket_client_async_ssl.cpp]]
|
|
][
|
|
[WebSocket, asynchronous using __system_executor__]
|
|
[]
|
|
[[path_link example/websocket/client/async-ssl-system-executor/websocket_client_async_ssl_system_executor.cpp websocket_client_async_ssl_system_executor.cpp]]
|
|
][
|
|
[WebSocket, coroutine]
|
|
[[path_link example/websocket/client/coro/websocket_client_coro.cpp websocket_client_coro.cpp]]
|
|
[[path_link example/websocket/client/coro-ssl/websocket_client_coro_ssl.cpp websocket_client_coro_ssl.cpp]]
|
|
]]
|
|
|
|
[endsect]
|
|
|
|
[/-----------------------------------------------------------------------------]
|
|
|
|
[section Servers]
|
|
|
|
These HTTP servers deliver files from a root directory specified on the
|
|
command line. All asynchronous servers support timeouts.
|
|
|
|
[table
|
|
[[Description] [Source File] [Source File (using SSL)]]
|
|
[
|
|
[HTTP, synchronous]
|
|
[[path_link example/http/server/sync/http_server_sync.cpp http_server_sync.cpp]]
|
|
[[path_link example/http/server/sync-ssl/http_server_sync_ssl.cpp http_server_sync_ssl.cpp]]
|
|
][
|
|
[HTTP, asynchronous]
|
|
[[path_link example/http/server/async/http_server_async.cpp http_server_async.cpp]]
|
|
[[path_link example/http/server/async-ssl/http_server_async_ssl.cpp http_server_async_ssl.cpp]]
|
|
][
|
|
[HTTP, coroutine]
|
|
[[path_link example/http/server/coro/http_server_coro.cpp http_server_coro.cpp]]
|
|
[[path_link example/http/server/coro-ssl/http_server_coro_ssl.cpp http_server_coro_ssl.cpp]]
|
|
][
|
|
[HTTP, stackless coroutine]
|
|
[[path_link example/http/server/stackless/http_server_stackless.cpp http_server_stackless.cpp]]
|
|
[[path_link example/http/server/stackless-ssl/http_server_stackless_ssl.cpp http_server_stackless_ssl.cpp]]
|
|
][
|
|
[HTTP, fast (optimized for speed)]
|
|
[[path_link example/http/server/fast/http_server_fast.cpp http_server_fast.cpp]]
|
|
[]
|
|
][
|
|
[HTTP, small (optimized for space)]
|
|
[[path_link example/http/server/small/http_server_small.cpp http_server_small.cpp]]
|
|
[]
|
|
][
|
|
[HTTP, flex (plain + SSL)]
|
|
[]
|
|
[[path_link example/http/server/flex/http_server_flex.cpp http_server_flex.cpp]]
|
|
]]
|
|
|
|
These WebSocket servers echo back any message received, keeping the
|
|
session open until the client disconnects. All asynchronous servers
|
|
support timeouts.
|
|
|
|
[table
|
|
[[Description] [Source File] [Source File (using SSL)]]
|
|
[
|
|
[WebSocket, synchronous]
|
|
[[path_link example/websocket/server/sync/websocket_server_sync.cpp websocket_server_sync.cpp]]
|
|
[[path_link example/websocket/server/sync-ssl/websocket_server_sync_ssl.cpp websocket_server_sync_ssl.cpp]]
|
|
][
|
|
[WebSocket, asynchronous]
|
|
[[path_link example/websocket/server/async/websocket_server_async.cpp websocket_server_async.cpp]]
|
|
[[path_link example/websocket/server/async-ssl/websocket_server_async_ssl.cpp websocket_server_async_ssl.cpp]]
|
|
][
|
|
[WebSocket, coroutine]
|
|
[[path_link example/websocket/server/coro/websocket_server_coro.cpp websocket_server_coro.cpp]]
|
|
[[path_link example/websocket/server/coro-ssl/websocket_server_coro_ssl.cpp websocket_server_coro_ssl.cpp]]
|
|
][
|
|
[WebSocket, stackless coroutine]
|
|
[[path_link example/websocket/server/stackless/websocket_server_stackless.cpp websocket_server_stackless.cpp]]
|
|
[[path_link example/websocket/server/stackless-ssl/websocket_server_stackless_ssl.cpp websocket_server_stackless_ssl.cpp]]
|
|
][
|
|
[WebSocket, fast (suited for benchmarks)]
|
|
[[path_link example/websocket/server/fast/websocket_server_fast.cpp websocket_server_fast.cpp]]
|
|
[]
|
|
]]
|
|
|
|
[endsect]
|
|
|
|
[/-----------------------------------------------------------------------------]
|
|
|
|
[section Servers (Advanced)]
|
|
|
|
These servers offer both HTTP and WebSocket services on the same port,
|
|
and illustrate the implementation of advanced features.
|
|
|
|
[table
|
|
[[Description] [Features] [Sources]]
|
|
[
|
|
[Advanced]
|
|
[[itemized_list
|
|
[Timeouts]
|
|
[Multi-threaded]
|
|
[HTTP pipelining]
|
|
[Parser-oriented HTTP reading]
|
|
[Dual protocols: HTTP and WebSocket]
|
|
[Clean exit via SIGINT (CTRL+C) or SIGTERM (kill)]
|
|
]]
|
|
[[path_link example/advanced/server/advanced_server.cpp advanced_server.cpp]]
|
|
][
|
|
[Advanced, flex (plain + SSL)]
|
|
[[itemized_list
|
|
[Timeouts]
|
|
[Multi-threaded]
|
|
[HTTP pipelining]
|
|
[Parser-oriented HTTP reading]
|
|
[Dual protocols: HTTP and WebSocket]
|
|
[Flexible ports: plain and SSL on the same port]
|
|
[Clean exit via SIGINT (CTRL+C) or SIGTERM (kill)]
|
|
]]
|
|
[[path_link example/advanced/server-flex/advanced_server_flex.cpp advanced_server_flex.cpp]]
|
|
][
|
|
[Chat Server, multi-threaded]
|
|
[[itemized_list
|
|
[Multi-threaded]
|
|
[Broadcasting Messages]
|
|
[Multi-user Chat Server]
|
|
[JavaScript Browser Client]
|
|
[Parser-oriented HTTP reading]
|
|
[Dual protocols: HTTP and WebSocket]
|
|
[Clean exit via SIGINT (CTRL+C) or SIGTERM (kill)]
|
|
]]
|
|
[[path_link example/websocket/server/chat-multi chat-multi]]
|
|
]]
|
|
|
|
[endsect]
|
|
|
|
[/-----------------------------------------------------------------------------]
|
|
|
|
[section:chat_server Chat Server __video__]
|
|
|
|
This example demonstrates a websocket chat server, allowing multiple
|
|
users to connect and participate in live, group messaging. It comes
|
|
with a tiny front end implemented in JavaScript and HTML5 which runs
|
|
in any browser. The example is accompanied by a one hour presentation
|
|
which provides a discussion of networking concepts, followed by in-depth
|
|
explanation of how the client and server are constructed. This talk
|
|
was delivered at [@https://cppcon.org CppCon 2018]. The source code
|
|
in the Beast example contains improvements to the original program.
|
|
|
|
[table Chat WebSocket Server and JavaScript Client
|
|
[[Component] [Features] [Sources]]
|
|
[
|
|
[Server]
|
|
[[itemized_list
|
|
[C++]
|
|
[Timeouts]
|
|
[Multi-threaded]
|
|
[Broadcast to multiple peers]
|
|
[Dual protocols: HTTP and WebSocket]
|
|
[Clean exit via SIGINT (CTRL+C) or SIGTERM (kill)]
|
|
]]
|
|
[[path_link example/websocket/server/chat-multi chat-multi]]
|
|
][
|
|
[Client]
|
|
[[itemized_list
|
|
[JavaScript / HTML5]
|
|
[Runs in the browser]
|
|
[Delivered by the server]
|
|
[Only 60 lines total including UI]
|
|
[Completely portable graphics]
|
|
]]
|
|
[[path_link example/websocket/server/chat-multi/chat_client.html chat_client.html]]
|
|
]]
|
|
|
|
[/ "Get rich quick! Using Boost.Beast WebSockets and Networking TS"]
|
|
'''
|
|
<mediaobject>
|
|
<videoobject>
|
|
<videodata fileref="https://www.youtube.com/embed/7FQwAjELMek"
|
|
align="center" contentwidth="560" contentdepth="315"/>
|
|
</videoobject>
|
|
</mediaobject>
|
|
'''
|
|
|
|
[endsect]
|
|
|
|
[/-----------------------------------------------------------------------------]
|
|
|
|
[endsect]
|