mirror of
https://github.com/CrowCpp/Crow.git
synced 2024-06-07 21:10:44 +00:00
2665086a49
Added meta tags for homepage Added meta description generator Removed usages of <h1> (mkdocs-material doesn't reconize more than 1) added space after # (markdown proper syntax) removed pip3 command from pull request CI
1.7 KiB
1.7 KiB
Websockets are a way of connecting a client and a server without the request response nature of HTTP.
To create a websocket in Crow, you need a websocket route.
A websocket route differs from a normal route quite a bit. While it uses the same CROW_ROUTE(app, "/url")
macro, that's about where the similarities end.
A websocket route follows the macro with .websocket()
which is then followed by a series of methods (with handlers inside) for each event. These are (sorted by order of execution):
#!cpp onaccept([&](const crow::request&){handler code goes here})
(This handler has to return bool)#!cpp onopen([&](crow::websocket::connection& conn){handler code goes here})
#!cpp onmessage([&](crow::websocket::connection& conn, const std::string message, bool is_binary){handler code goes here})
#!cpp onerror([&](crow::websocket::connection& conn){handler code goes here})
#!cpp onclose([&](crow::websocket::connection& conn, const std::string reason){handler code goes here})
These event methods and their handlers can be chained. The full Route should look similar to this:
CROW_ROUTE(app, "/ws")
.websocket()
.onopen([&](crow::websocket::connection& conn){
do_something();
})
.onclose([&](crow::websocket::connection& conn, const std::string& reason){
do_something();
})
.onmessage([&](crow::websocket::connection& /*conn*/, const std::string& data, bool is_binary){
if (is_binary)
do_something(data);
else
do_something_else(data);
});
For more info go here.