- Протокол полнодуплескной(двунаправленной) связи поверх TCP-cоединения, предназначенный для обмена сообщениями между браузером и веб-сервером в режиме реального времени - Позволяет серверу отправлять данные браузеру без дополнительного запроса со стороны клиента - Обмен данными ведется через отдельное TCP-соединение - Поддерживается всеми современными браузерами - Альтернатива - [[AJAX]] + [Long Polling](Polling.md) ## Пример кода ```JavaScript var webSocket = new WebSocket("ws://localhost/echo"); webSocket.onopen = function(event) { webSocket.send("Hello"); } webSocket.onmessage = function(event) { webSocket.close(); } webSocket.onclose = function(event) {} ``` ## Как устанавливается 1. Браузер отправляет обычный [HTTP](../Сеть%20и%20API/HTTP.md)-запрос с заголовком `Connection: Upgrade` и `Upgrade: websocket` 2. Сервер отвечает `101` (Switching Protocols) 3. HTTP обрывается, появляется чистый TCP-коннект ## Плюсы - Идеально для реалтайма - Нулевые расходы на трафик ## Минусы - Сложнее администрировать