Что такое WebSocket?
WebSocket — протокол полнодуплексной связи поверх TCP-соединения, предназначенный для обмена сообщениями между браузером и сервером в режиме реального времени.
Аналогия из жизни: HTTP похож на переписку по почте — клиент отправляет письмо, ждёт ответ, отправляет следующее. WebSocket — это телефонный разговор: после установления соединения обе стороны могут говорить в любой момент, не дожидаясь друг друга.
В отличие от HTTP, где клиент всегда инициирует запрос (request-response модель), WebSocket позволяет серверу отправлять данные клиенту по своей инициативе (push). Соединение устанавливается один раз через HTTP-рукопожатие (upgrade), после чего переключается на протокол WebSocket и остаётся открытым.
URI-схемы WebSocket
| Схема | Описание |
|---|---|
ws:// |
Нешифрованное соединение (аналог HTTP) |
wss:// |
Шифрованное соединение (аналог HTTPS) |
Когда использовать WebSocket
- Чаты и мессенджеры
- Уведомления в реальном времени
- Онлайн-игры
- Биржевые котировки и дашборды с живыми данными
- Совместное редактирование документов
В Java-мире WebSocket поддерживается через javax.websocket (Jakarta WebSocket API) и Spring WebSocket / Spring WebFlux. Spring также предоставляет STOMP-поддержку поверх WebSocket для сообщений с маршрутизацией.
На собеседовании: ключевое отличие от HTTP — двусторонняя связь и постоянное соединение. Часто спрашивают: «Зачем WebSocket, если есть AJAX?» — AJAX работает по модели запрос-ответ, а WebSocket позволяет серверу пушить данные без запроса клиента.