Sobes.tech
Junior
92
questionbank

Что такое 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.