28 lines
1.5 KiB
Markdown
28 lines
1.5 KiB
Markdown
- Протокол полнодуплескной(двунаправленной) связи поверх 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-коннект
|
|
## Плюсы
|
|
- Идеально для реалтайма
|
|
- Нулевые расходы на трафик
|
|
## Минусы
|
|
- Сложнее администрировать |