Блог и новости

Мониторинг WebSocket: пошаговое тестирование и примеры кода

2026-05-02 18:47 Проверки Блог
В современной веб-разработке HTTP-запросов уже недостаточно. Если ваше приложение — это чат, торговый терминал или система уведомлений, скорее всего, вы используете WebSocket. Этот протокол позволяет держать постоянное двустороннее соединение между клиентом и сервером, избавляя от необходимости постоянно опрашивать сервер.
Однако мониторинг таких соединений сложнее, чем обычный GET /health. Нужно не просто проверить доступность порта, а убедиться, что соединение проходит успешно, данные передаются в обе стороны, а соединение не обрывается по таймауту.
Мы расширили возможности наших пошаговых API проверок, добавив полноценную поддержку WebSocket. Теперь вы можете включать проверку сокетов в общие сценарии тестирования ваших сервисов.

Что такое WebSocket и зачем его проверять

WebSocket (WS) — это протокол связи поверх TCP-соединения, предназначенный для обмена сообщениями в реальном времени. В отличие от HTTP, где клиент всегда инициирует запрос, в WebSocket сервер может сам отправить данные клиенту в любой момент.
Почему обычного пинга недостаточно:
  • Специфика Handshake: WebSocket начинается с HTTP-запроса с заголовком Upgrade. Если балансировщик или прокси настроены неверно, соединение не установится.
  • Состояние соединения: Сокет может быть "открыт", но не принимать данные из-за внутренних ошибок приложения.
  • Таймауты: Важно проверять, как ведут себя таймауты и корректно ли работает механизм Ping/Pong для поддержания сессии.

Как это работает в Pingera

В рамках Multistep API проверок вы можете использовать JavaScript-сценарии для взаимодействия с WebSocket. Мы используем привычный синтаксис, который позволяет открывать соединение, отправлять сообщения и ожидать конкретных ответов.
Пример сценария для проверки тестового WSS-сервера:
import { WebSocket } from 'ws';

const ws = new WebSocket('wss://echo.websocket.org');

await new Promise<void>((resolve, reject) => {
  ws.on('open', () => {
    console.log('✅ Подключение к WebSocket установлено');
    resolve();
  });
  ws.on('error', reject);
});

const message = 'ping от Pingera';
const response = await new Promise<string>((resolve, reject) => {
  ws.on('message', (data) => resolve(data.toString()));
  ws.on('error', reject);
  ws.send(message);
});

if (response !== message) {
  throw new Error(`Ожидался ответ "${message}", получен "${response}"`);
}
console.log(`✅ Получен ответ: ${response}`);

ws.close();
В этом примере мы не просто "стучимся" в порт, а проверяем бизнес-логику: дошло ли сообщение и вернул ли сервер ожидаемый результат.

Интеграция в цепочки проверок

Главное преимущество Multistep API — возможность комбинировать разные протоколы. Вы можете:
  1. Авторизоваться через обычный REST API (POST запрос).
  2. Получить токен доступа.
  3. Использовать этот токен для открытия WebSocket-соединения.
  4. Проверить, что после подключения сервер отправил начальное состояние (initial state).
Все результаты выполнения, включая логи и время установления соединения, доступны в детальном отчете в панели управления Pingera.

Заключение

Поддержка WebSocket в пошаговых проверках закрывает потребность в мониторинге сложных real-time систем. Это позволяет инженерам быть уверенными не только в аптайме серверов, но и в корректной работе транспортного уровня своих приложений.
Попробовать настройку WebSocket-сценариев можно уже сейчас в разделе Multistep API.