В современной веб-разработке 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 — возможность комбинировать разные протоколы. Вы можете:
- Авторизоваться через обычный REST API (POST запрос).
- Получить токен доступа.
- Использовать этот токен для открытия WebSocket-соединения.
- Проверить, что после подключения сервер отправил начальное состояние (initial state).
Все результаты выполнения, включая логи и время установления соединения, доступны в детальном отчете в панели управления Pingera.
Заключение
Поддержка WebSocket в пошаговых проверках закрывает потребность в мониторинге сложных real-time систем. Это позволяет инженерам быть уверенными не только в аптайме серверов, но и в корректной работе транспортного уровня своих приложений.
Попробовать настройку WebSocket-сценариев можно уже сейчас в разделе Multistep API.