Domanda

Ho del codice che esegue un sacco di HTTP GET, POST e PUT utilizzando Commons HttpClient 3.1.Vorrei fornire un indicatore della velocità di trasferimento corrente nella mia GUI, ma non sono riuscito a trovare alcun metodo per determinare la velocità di trasferimento di un HttpMethod in fase di elaborazione.

Potrei facilmente cronometrare il trasferimento ed eseguire alcuni semplici calcoli una volta completato per determinare quale fosse la velocità, ma ciò fornisce un'esperienza utente negativa durante un lungo caricamento o download.Qualcuno sa come determinare la velocità di trasferimento di una richiesta Commons HttpClient Mentre è ancora in fase di elaborazione?

È stato utile?

Soluzione

non ho usato estensivamente HttpClient, quindi ci può essere un semplice gancio. Tuttavia, sembra che HttpConnection.getResponseInputStream () restituisce un semplice InputStream.

Per aggiungere il gancio da soli, avresti bisogno di ignorare HttpConnectionManager e HttpConnection, per restituire un flusso decorato che tiene traccia del numero di byte letti. Si potrebbe poi girare un secondo thread per interrogare questo flusso e visualizzare la velocità di trasferimento, o (meglio) creare il flusso con una richiamata ogni N byte (meglio, perché non c'è bisogno di preoccuparsi della concorrenza, ed è possibile anche impostare N in modo tale che il callback viene richiamato solo per i file di grandi dimensioni).

Altri suggerimenti

Un gancio più semplice sarebbe estendere il file HttpEntityWrapper e sovrascrivere il getContent() metodo:

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

Successivamente puoi aggiungerlo come intercettatore di risposta

httpClient.addResponseInterceptor(HttpResponseInterceptor itcp)

In questo modo non è necessario sovrascrivere quanto menzionato HttpConnectionManager E HttpConnection

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top