Что такое Long Polling

Ответ

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

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

  1. Клиент отправляет HTTP-запрос.
  2. Сервер ждёт, пока не появится обновление (или не истечёт таймаут).
  3. При появлении данных сервер отвечает.
  4. Клиент обрабатывает ответ и повторяет запрос.

Пример на JavaScript:

function longPoll() {
  fetch('/updates')
    .then(response => response.json())
    .then(data => {
      console.log('Update:', data);
      longPoll(); // Повторяем запрос
    })
    .catch(error => {
      console.error('Error:', error);
      setTimeout(longPoll, 1000); // Повтор через 1 сек при ошибке
    });
}
longPoll();

Плюсы:

  • Проще в реализации, чем WebSockets
  • Работает везде, где есть HTTP

Минусы:

  • Высокая нагрузка на сервер
  • Задержки из-за повторных соединений

Ответ 18+ 🔞

Слушай, а вот есть такая штука — Long Polling. Ну, это когда твой клиент, как назойливый мудак, стучится к серверу: «Ну что там новенького? А? А?». А сервер такой сидит, молчит, и не отвечает, пока реально не появится что-то сказать. Не то что эти идиотские короткие опросы каждую секунду. Ждёт, терпит, как святой. А как только событие случается — тут же вываливает ответ и захлопывает дверь. Клиент, довольный, обрабатывает данные и тут же, сука, опять: «Ну что там? А сейчас?». И по новой. Цикл, блядь, бесконечный.

Как эта ёбаная карусель крутится:

  1. Клиент, нетерпеливый как голодный кот, посылает HTTP-запрос.
  2. Сервер его берёт в работу и просто... ждёт. Сидит, блядь, как партизан, пока не появится обновление или пока не надоест (таймаут сработает).
  3. Как только есть что сказать — сразу в ответ, без церемоний.
  4. Клиент, получив свою порцию инфы, даже не думает отдыхать — сразу же лепит новый запрос. Задолбал, в общем.

Вот, смотри, как это в коде выглядит, простой пример:

function longPoll() {
  fetch('/updates')
    .then(response => response.json())
    .then(data => {
      console.log('Update:', data);
      longPoll(); // И сразу же, блядь, по новой!
    })
    .catch(error => {
      console.error('Error:', error);
      setTimeout(longPoll, 1000); // Обосрался запрос? Щас перезайдём, погоди.
    });
}
longPoll();

Чем это, блядь, хорошо:

  • Реализовать проще, чем эти ваши модные WebSockets, ёпта. Справится даже полупидор.
  • Работает на всём, что HTTP понимает. Везде, сука.

А чем это, блять, плохо:

  • Серверу пиздец как тяжело. Постоянно эти приставучие клиенты висят на нём, как груз.
  • Задержки могут быть, потому что после каждого ответа — новое соединение, рукопожатия, всё это... Терпения ноль ебать.