Что такое long polling?

Junior
960 просмотров
AFK Offer AI

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

func longPollHandler(w http.ResponseWriter, r *http.Request) {
    ctx, cancel := context.WithTimeout(r.Context(), 30*time.Second)
    defer cancel()

select { case msg := <-updates: json.NewEncoder(w).Encode(msg) case <-ctx.Done(): w.WriteHeader(http.StatusNoContent) // таймаут, нет данных } }

Плюсы: работает везде (просто HTTP), не нужен WebSocket, проходит через любые прокси и файрволы. Минусы: каждое обновление — новое HTTP-соединение (overhead), задержка равна RTT, сервер держит открытые соединения.

Long polling — самый простой способ получить near-real-time без WebSocket. Telegram Bot API, например, использует именно long polling. Для большинства задач сейчас лучше SSE или WebSocket, но long polling всё ещё жив.

Следующий вопрос

Что такое connection pool в Go?