← Назад к вопросам

Что такое Long Polling?

1.3 Junior🔥 201 комментариев
#Браузер и сетевые технологии

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Long Polling

Long Polling — это техника реального времени для получения данных с сервера, при которой клиент отправляет HTTP запрос, а сервер держит соединение открытым, пока не появятся новые данные.

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

В отличие от обычного Short Polling, где клиент регулярно спрашивает сервер (например, каждую секунду), Long Polling работает так:

  1. Клиент отправляет запрос на сервер
  2. Сервер получает запрос и проверяет: есть ли новые данные?
  3. Если данных нет — сервер НЕ закрывает соединение, а ждёт (например, 30 секунд)
  4. Когда появляются новые данные — сервер сразу отправляет ответ
  5. Клиент получает ответ, обновляет интерфейс и тут же отправляет новый Long Poll запрос
  6. Процесс повторяется

Пример реализации на фронте

class LongPoller {
  constructor(url, onData) {
    this.url = url;
    this.onData = onData;
    this.isRunning = false;
  }

  start() {
    this.isRunning = true;
    this.poll();
  }

  stop() {
    this.isRunning = false;
  }

  async poll() {
    while (this.isRunning) {
      try {
        const response = await fetch(this.url, {
          method: 'GET',
          timeout: 60000 // Ждём ответ 60 сек
        });
        
        if (response.ok) {
          const data = await response.json();
          if (data) {
            this.onData(data);
          }
        }
      } catch (error) {
        console.error('Long poll error:', error);
        // Ждём перед retry
        await new Promise(r => setTimeout(r, 5000));
      }
    }
  }
}

// Использование
const poller = new LongPoller(
  '/api/messages',
  (data) => {
    console.log('Новые сообщения:', data);
    // Обновляем интерфейс
  }
);

poller.start();

Плюсы Long Polling

  • Универсальность — работает везде, даже где WebSocket блокируют
  • Простота — легко реализовать на любом стеке
  • Контроль — полный контроль над таймаутами и retry
  • Совместимость — поддерживается старыми браузерами

Минусы Long Polling

  • Задержка — может быть задержка до N секунд перед получением данных
  • Нагрузка на сервер — много открытых соединений потребляют ресурсы
  • Трафик — каждый poll = HTTP запрос с headers, что неэффективно
  • Масштабируемость — сложно масштабировать на миллионы пользователей

Когда использовать

  • Чаты и мессенджеры (низкие требования к latency)
  • Уведомления
  • Live ленты
  • Когда WebSocket недоступен

Альтернативы

  • WebSocket — двусторонний канал в реальном времени (лучше всего)
  • Server-Sent Events (SSE) — сервер отправляет данные в реальном времени по HTTP
  • Polling — простой опрос без ожидания
  • WebRTC — для peer-to-peer коммуникации

В современных приложениях Long Polling считается устаревшей техникой, но остаётся важной для понимания и использования в специфических сценариях.