Como obter a taxa de transferência atual no Commons httpclient 3.x
-
20-09-2019 - |
Pergunta
Eu tenho algum código que faz um monte de http recebe, postagens e puts usando Commons HttpClient 3.1. Eu gostaria de fornecer um indicador de velocidade de transferência atual na minha GUI, mas não consegui encontrar métodos para determinar a taxa de transferência de um httpmethod que está sendo processado.
Eu poderia facilmente cronometrar a transferência e fazer algumas matemáticas simples depois de ter sido concluída para determinar qual era a velocidade, mas isso proporciona uma má experiência do usuário durante um longo upload ou download. Alguém sabe como determinar a taxa de transferência de uma solicitação HttpClient enquanto ainda está sendo processado?
Solução
Não usei extensivamente o HTTPClient, então pode haver um gancho simples. No entanto, parece que Httpconnection.getResponseInputStream () Retorna um simples InputStream
.
Para adicionar o gancho, você precisaria substituir HttpConnectionManager
e HttpConnection
, para devolver um riacho decorado que acompanha o número de bytes lidos. Você pode girar um segundo segmento para pesquisar esse fluxo e exibir a taxa de transferência, ou (melhor) criar o fluxo com um retorno de chamada a cada n bytes (melhor porque você não precisa se preocupar com a simultaneidade e também pode definir n de modo que o retorno de chamada seja chamado apenas para arquivos grandes).
Outras dicas
Gancho mais simples seria estender o HttpEntityWrapper
e substituir o getContent()
método:
public InputStream getContent() throws IOException {
InputStream wrappedin = wrappedEntity.getContent();
return new MyTransferRateInputStream(wrappedin);
}
Mais tarde você pode adicionar isso como o interceptador de resposta
httpClient.addResponseInterceptor(HttpResponseInterceptor itcp)
Dessa forma, você não precisa substituir o mencionado HttpConnectionManager
e HttpConnection