Зачем нужен WebSocket в веб-разработке?

«Зачем нужен WebSocket в веб-разработке?» — вопрос из категории Сети, который задают на 26% собеседований Node.js Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

WebSocket — это протокол для создания постоянного двустороннего канала связи между клиентом (браузером) и сервером. В контексте Node.js он критически важен для приложений реального времени, где HTTP с его запрос-ответной моделью неэффективен.

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

  • Низкая задержка: Данные передаются мгновенно, без необходимости ждать нового HTTP-запроса от клиента (как при Long Polling).
  • Эффективность: После первоначального handshake (также через HTTP) устанавливается одно TCP-соединение, которое остаётся открытым. Это устраняет накладные расходы на повторные заголовки и установку соединения для каждого сообщения.
  • Полнодуплексная связь: Сервер может отправлять данные клиенту в любой момент, независимо от активности клиента, и наоборот.

Пример реализации сервера на Node.js с библиотекой ws:

const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });

wss.on('connection', function connection(ws) {
  console.log('Новое подключение установлено');

  ws.on('message', function incoming(message) {
    console.log('Получено от клиента: %s', message);
    // Широковещательная рассылка сообщения всем подключённым клиентам
    wss.clients.forEach(function each(client) {
      if (client !== ws && client.readyState === WebSocket.OPEN) {
        client.send(`Клиент сказал: ${message}`);
      }
    });
  });

  ws.send('Добро пожаловать на WebSocket сервер!');
});

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

  • Чат-приложения и системы уведомлений.
  • Онлайн-панели мониторинга (дашборды) с live-данными.
  • Многопользовательские онлайн-игры и коллаборативные инструменты (совместное редактирование).
  • Финансовые или спортивные тикеры с потоковой передачей данных.