Как получить текущую скорость передачи данных в Commons HttpClient 3.x

StackOverflow https://stackoverflow.com/questions/1741797

  •  20-09-2019
  •  | 
  •  

Вопрос

У меня есть код, который выполняет несколько HTTP GET, POST и PUT, используя Commons HttpClient 3.1.Я хотел бы предоставить индикатор текущей скорости передачи в моем графическом интерфейсе, но не смог найти никаких методов для определения скорости передачи обрабатываемого HttpMethod.

Я мог бы легко просто рассчитать время передачи и выполнить некоторые простые математические вычисления после ее завершения, чтобы определить, какова была скорость, но это ухудшает взаимодействие с пользователем во время длительной загрузки или скачивания.Кто-нибудь знает, как определить скорость передачи запроса Commons HttpClient? пока оно еще обрабатывается?

Это было полезно?

Решение

Я не часто использовал HttpClient, поэтому здесь может быть простой крючок.Однако, похоже, что HttpConnection.getResponseInputStream() возвращает простой InputStream.

Чтобы добавить хук самостоятельно, вам нужно переопределить HttpConnectionManager и HttpConnection, чтобы вернуть декорированный поток, который отслеживает количество прочитанных байтов.Затем вы можете запустить второй поток для опроса этого потока и отображения скорости передачи или (лучше) создать поток с обратным вызовом каждые N байт (лучше, потому что вам не нужно заботиться о параллелизме, и вы также можете установить N так что обратный вызов вызывается только для больших файлов).

Другие советы

Более простым крючком было бы расширить HttpEntityWrapper и переопределить getContent() метод:

public InputStream getContent() throws IOException {
    InputStream wrappedin = wrappedEntity.getContent();
    return new MyTransferRateInputStream(wrappedin);
}

Позже вы можете добавить это в качестве перехватчика ответа.

httpClient.addResponseInterceptor(HttpResponseInterceptor itcp)

Таким образом, вам не нужно переопределять упомянутое HttpConnectionManager и HttpConnection

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top