Что такое WebSocket и для чего он используется?

«Что такое WebSocket и для чего он используется?» — вопрос из категории HTTP и веб-протоколы, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Основное назначение: Реализация интерактивного обмена данными в реальном времени без необходимости постоянных HTTP-запросов (polling).

Типичные сценарии использования:

  • Онлайн-чаты и уведомления
  • Многопользовательские онлайн-игры
  • Биржевые тикеры и финансовые дашборды
  • Совместные редакторы и инструменты

Ключевые преимущества перед HTTP:

  1. Низкая задержка: После рукопожатия (handshake) данные передаются по уже установленному соединению.
  2. Эффективность: Отсутствуют накладные расходы на заголовки HTTP при каждом сообщении.
  3. Двунаправленность: Сервер может отправлять данные клиенту в любой момент без ожидания запроса.

Пример установки соединения и обмена сообщениями в JavaScript:

// Создание WebSocket-соединения
const socket = new WebSocket('wss://api.example.com/ws');

// Обработчик входящих сообщений
socket.onmessage = function(event) {
  console.log('Сообщение от сервера:', event.data);
};

// Отправка данных на сервер
socket.send(JSON.stringify({ type: 'greeting', text: 'Hello' }));

Протокол начинается с HTTP-совместимого рукопожатия (Upgrade: websocket), после чего переходит на бинарный или текстовый фреймовый обмен.