123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244 |
- [/
- 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]
|