質問

を使用して大量のHTTP GET、POST、およびPUTを実行するコードがあります。 コモンズHTTPクライアント3.1. 。GUI に現在の転送速度インジケーターを提供したいと考えていますが、処理中の HttpMethod の転送速度を決定する方法が見つかりませんでした。

転送の時間を計り、完了後に簡単な計算をして速度を判断することは簡単にできますが、これでは長時間のアップロードまたはダウンロード中のユーザー エクスペリエンスが低下します。Commons HttpClientリクエストの転送速度を決定する方法を知っている人はいますか その間 まだ処理中ですか?

役に立ちましたか?

解決

私は HttpClient をあまり使用したことがないので、単純なフックがあるかもしれません。しかし、どうやら HttpConnection.getResponseInputStream() 単純なものを返します InputStream.

自分でフックを追加するには、オーバーライドする必要があります HttpConnectionManager そして HttpConnection, 、読み取られたバイト数を追跡​​する修飾されたストリームを返します。次に、2 番目のスレッドをスピンアップして、このストリームをポーリングして転送速度を表示するか、(より良い) 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