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?

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top