Что такое WebSocket и как проверить обрыв соединения?
🔹 Что такое WebSocket
WebSocket — это сетевой протокол поверх TCP, позволяющий устанавливать постоянное двустороннее соединение между клиентом и сервером. В отличие от HTTP (где клиент всегда инициирует запрос), WebSocket обеспечивает реальное время: сервер может сам отправлять данные клиенту без дополнительных запросов.
📌 Используется в:
чаты, мессенджеры
онлайн-игры
торговые платформы (биржи)
системы мониторинга
Особенности
Постоянное соединение
В отличие от HTTP, где клиент должен каждый раз отправлять запрос, WebSocket создаёт соединение один раз и поддерживает его открытым.
Двусторонняя передача данных
Клиент и сервер могут отправлять сообщения друг другу в реальном времени, без дополнительных запросов.
Меньше накладных расходов
После установки соединения данные передаются без постоянных HTTP-заголовков → быстрее и эффективнее.
Протоколы
ws://
— обычное соединение (без шифрования).wss://
— защищённое соединение (аналог HTTPS, поверх TLS/SSL).
Жизненный цикл WebSocket
Клиент инициирует соединение через HTTP-запрос с заголовком
Upgrade: websocket
.Сервер отвечает подтверждением (handshake).
После апгрейда соединение становится постоянным, обмен идёт по WebSocket-протоколу.
Клиент и сервер могут в любой момент отправлять сообщения.
Закрытие соединения (по инициативе клиента, сервера или при обрыве сети).
Для QA важно проверять
Установление и завершение соединения (handshake, закрытие).
Обработку обрыва соединения и повторных подключений.
Корректность передачи бинарных и текстовых сообщений.
Работа с шифрованием (WSS).
Нагрузку (много одновременных подключений).
🔹 Как проверить обрыв соединения
1. События WebSocket API (на клиенте):
В JavaScript у объекта WebSocket
есть события:
onopen
– соединение установленоonmessage
– получены данныеonerror
– ошибка соединенияonclose
– соединение закрыто
Пример:
const ws = new WebSocket("wss://example.com/socket");
ws.onopen = () => console.log("Соединение открыто");
ws.onmessage = (event) => console.log("Сообщение:", event.data);
ws.onerror = (err) => console.error("Ошибка:", err);
ws.onclose = () => console.warn("Соединение закрыто");
2. Ping/Pong (KeepAlive)
Многие серверы и клиенты реализуют ping/pong-механизм для проверки активности:
Клиент периодически отправляет
ping
Сервер отвечает
pong
Если ответа нет в течение N секунд → считаем соединение оборванным
3. Таймаут ожидания
Можно завести таймер:
Если за определённое время не пришло ни одного сообщения/ответа от сервера → разрываем соединение вручную и пробуем переподключиться.
4. TCP KeepAlive (на уровне сети)
На более низком уровне можно включить keep-alive в TCP-соединении, но чаще в вебе это решают приложением (через ping/pong).
Last updated
Was this helpful?