Что такое Long Polling в контексте сетевых запросов?

«Что такое Long Polling в контексте сетевых запросов?» — вопрос из категории Сети, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Long Polling (длинные опросы) — это техника получения обновлений с сервера, при которой клиент отправляет HTTP-запрос, а сервер удерживает соединение открытым, пока не появится новое событие или не истечёт таймаут. Как только сервер отвечает с данными или по таймауту, клиент немедленно отправляет следующий запрос, создавая эффект "почти" реального времени.

Принцип работы:

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

Пример упрощённой реализации на Swift:

func startLongPolling() {
    let url = URL(string: "https://api.example.com/updates")!
    let task = URLSession.shared.dataTask(with: url) { [weak self] data, _, error in
        // Обработать полученные данные или таймаут
        if let data = data {
            self?.handleUpdate(data)
        }
        // Незамедлительно запустить следующий опрос
        self?.startLongPolling()
    }
    task.resume()
}

Сравнение с другими технологиями:

  • Плюсы: Проще в реализации, чем WebSockets, и лучше обходит некоторые корпоративные прокси и файрволы.
  • Минусы: Высокая нагрузка на сервер из-за постоянных соединений, задержки, равные времени таймаута, и большие накладные расходы из-за частых HTTP-заголовков.