Crow/docs/guides/websockets.md
The-EDev 23648445f3 Changed documentation. a lot.
Added mkdocs documentation.
Altered doxygen generation (doxyfile and shell script) to work with mkdocs.
Removed the whole html folder thing for docs, now the files reside in the root gh-pages branch.
New readme.
2020-11-28 17:28:47 +03:00

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:

  • #!cpp onopen([&](crow::websocket::connection& conn){handler code goes here})
  • #!cpp onaccept([&](const crow::request&){handler code goes here}) (This handler has to return bool)
  • #!cpp onmessage([&](crow::websocket::connection& conn, const std::string message, bool is_binary){handler code goes here})
  • #!cpp onclose([&](crow::websocket::connection& conn, const std::string reason){handler code goes here})
  • #!cpp onerror([&](crow::websocket::connection& conn){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.