Что такое WebSocket и как проверить обрыв соединения?

🔹 Что такое WebSocket

WebSocket — это сетевой протокол поверх TCP, позволяющий устанавливать постоянное двустороннее соединение между клиентом и сервером. В отличие от HTTP (где клиент всегда инициирует запрос), WebSocket обеспечивает реальное время: сервер может сам отправлять данные клиенту без дополнительных запросов.

📌 Используется в:

  • чаты, мессенджеры

  • онлайн-игры

  • торговые платформы (биржи)

  • системы мониторинга


Особенности

  1. Постоянное соединение

    • В отличие от HTTP, где клиент должен каждый раз отправлять запрос, WebSocket создаёт соединение один раз и поддерживает его открытым.

  2. Двусторонняя передача данных

    • Клиент и сервер могут отправлять сообщения друг другу в реальном времени, без дополнительных запросов.

  3. Меньше накладных расходов

    • После установки соединения данные передаются без постоянных HTTP-заголовков → быстрее и эффективнее.

  4. Протоколы

    • ws:// — обычное соединение (без шифрования).

    • wss:// — защищённое соединение (аналог HTTPS, поверх TLS/SSL).


Жизненный цикл WebSocket

  1. Клиент инициирует соединение через HTTP-запрос с заголовком Upgrade: websocket.

  2. Сервер отвечает подтверждением (handshake).

  3. После апгрейда соединение становится постоянным, обмен идёт по WebSocket-протоколу.

  4. Клиент и сервер могут в любой момент отправлять сообщения.

  5. Закрытие соединения (по инициативе клиента, сервера или при обрыве сети).


Для 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?