My entire game engine runs on them, lmao. The way I've set this up is that I have a C++ backend and an HTML/JS frontend. The C++ application sets up a web server on port 1443 that serves HTML, CSS, images, and other files. It then listens to AJAX commands from the client, which are simply GET requests for specific paths like /ajax/select_main_menu_item?button=new. Any time the server state changes, everything gets bundled into a JSON payload sent to the client via a WebSocket on port 1444. And this works surprisingly well! Because my games are always turn-based, the client only has to respond to payloads as they come in.
And now for the insane twist: The server and client are the same executable! The web client runs inside a Chromium Embedded Framework instance, so the calls are coming from inside the userspace!!