Начинается как обычный HTTP-запрос с заголовком Upgrade: websocket. Сервер подтверждает апгрейд — и TCP-соединение остаётся открытым. Обе стороны могут отправлять сообщения в любой момент без накладных расходов нового HTTP-запроса.
Node.js: Socket.io, ws. PHP: Ratchet, Swoole, ReactPHP. Go: gorilla/websocket. Python: websockets, FastAPI WebSocket. В продакшне часто используют отдельный WebSocket-сервер рядом с основным HTTP-приложением.