Что такое long polling?

Junior
935 просмотров
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 всё ещё жив.

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

Как работает testing.T?