Что такое WebSocket?
Ответ от нейросети
sobes.tech AI
Протокол прикладного уровня, обеспечивающий двунаправленный, полнодуплексный канал связи через одно TCP-соединение. Используется дляリアルтайм-приложений: чатов, онлайн-игр, торговых платформ.
Отличие от HTTP:
- HTTP: клиент отправляет запрос, сервер отвечает (однонаправленный). Устанавливает новое соединение для каждого запроса или переиспользует через Keep-Alive.
- WebSocket: после установления соединения клиент и сервер могут отправлять данные в любое время без повторного установления связи (двунаправленный).
Установка соединения:
Используется HTTP для первоначального "рукопожатия" (handshake). Клиент отправляет HTTP-запрос с заголовками Upgrade: websocket и Connection: Upgrade. Сервер отвечает HTTP-ответом со статусом 101 Switching Protocols.
Фреймы данных:
Передача данных происходит в виде фреймов, что позволяет передавать различные типы данных (текст, бинарные данные).
Пример установки соединения (схематично):
Клиент -> Сервер (Upgrade Request)
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13
Сервер -> Клиент (Upgrade Response)
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZgYesItU=
После этого начинается обмен WebSocket-фреймами.
Преимущества:
- Низкая задержка (low latency).
- Снижение нагрузки на сервер (нет необходимости в постоянном поллинге).
- Возможность передачи данных в реальном времени.
Недостатки:
- Необходимость поддержки на стороне клиента и сервера.
- Более сложная реализация по сравнению с простым HTTP-запросом.
В Java для работы с WebSocket часто используются библиотеки:
- Java API for WebSocket (JSR 356).
- Spring WebSocket.
- Netty.