1

Commons HttpClient 3.1を使用して、一連の HTTP GET、POST、および PUT を実行するコードがいくつかあります。現在の転送速度インジケーターを GUI に表示したいのですが、処理中の HttpMethod の転送速度を判断する方法が見つかりませんでした。

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

4

2 に答える 2

3

私は HttpClient をあまり使っていないので、単純なフックがあるかもしれません。ただし、HttpConnection.getResponseInputStream()は単純な を返すようInputStreamです。

HttpConnectionManagerフックを自分で追加するには、 and をオーバーライドしてHttpConnection、読み取ったバイト数を追跡​​する装飾されたストリームを返す必要があります。次に、2 番目のスレッドをスピンアップしてこのストリームをポーリングし、転送速度を表示するか、(より良い) N バイトごとにコールバックを使用してストリームを作成することができます (同時実行性を気にする必要がなく、N を設定することもできるため、より良い)コールバックが大きなファイルに対してのみ呼び出されるようにします)。

于 2009-11-16T12:39:08.740 に答える
1

より単純なフックは、を拡張してメソッドHttpEntityWrapperをオーバーライドすることです。getContent()

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

後でこれを応答インターセプターとして追加できます

httpClient.addResponseInterceptor(HttpResponseInterceptor itcp)

そうすれば、前述HttpConnectionManagerHttpConnection

于 2012-09-06T10:49:08.757 に答える