Question

J'ai un code qui fait un tas de HTTP GETS, POSTs et PUT utilisant Commons HttpClient 3.1 . Je voudrais fournir un indicateur de vitesse de transfert dans mon interface graphique, mais a été incapable de trouver des méthodes pour la détermination du taux de transfert d'un HttpMethod en cours de traitement.

Je pourrais facilement tout temps le transfert et faire quelques calculs simples après avoir été complet pour déterminer ce que la vitesse était, mais cela donne une mauvaise expérience utilisateur lors d'un long chargement ou de téléchargement. Est-ce que quelqu'un sait comment déterminer le taux de transfert d'une demande de communes HttpClient en il est encore en cours de traitement?

Était-ce utile?

La solution

Je ne l'ai pas utilisé HttpClient abondamment, donc il peut être un simple crochet. Cependant, il semble que HttpConnection.getResponseInputStream () retourne simple InputStream.

Pour ajouter le crochet vous-même, vous aurez besoin de passer outre HttpConnectionManager et HttpConnection, pour retourner un flux décoré qui conserve la trace du nombre d'octets lus. Vous pouvez ensuite tourner un second fil au sondage ce flux et afficher le taux de transfert, ou (mieux) créer le flux avec un rappel tous les N octets (mieux parce que vous n'avez pas se soucier de la concurrence, et vous pouvez également définir N de telle sorte que le rappel est invoqué que pour les gros fichiers).

Autres conseils

crochet simple serait d'étendre la HttpEntityWrapper et remplacer la méthode getContent():

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

Plus tard, vous pouvez ajouter ce que l'intercepteur de réponse

httpClient.addResponseInterceptor(HttpResponseInterceptor itcp)

De cette façon, vous n'avez pas besoin de passer outre la HttpConnectionManager et HttpConnection mentionné

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top