0
  1. イントラネットでは、ネットワークは良好です
  2. サーバーAは、httpサービスによって同時にサーバーBに大量のファイルを送信します
  3. HTTP プロトコルは HTTP 1.1 で、デフォルトで永続的な接続を使用します
  4. [更新] 接続プールを使用して 100 個の接続を保持する
  5. [更新] 一度に 1 つの接続でファイルを送信する
  6. [更新] 接続は閉じられず (持続接続)、次のファイルの送信に再利用されます
  7. 各ファイルのサイズは 7K から 30K です

質問:

上記の条件では、永続的な接続は非永続的な接続よりも優れたパフォーマンスを発揮しますか?

ファイルをアップロードすると、接続が長時間ブロックされることがわかったため、この質問をします。より安定していると思うので、非永続接続を使用することをお勧めしますが、私の同僚は、永続接続の方がパフォーマンスが優れていると考えているため、永続接続の使用を拒否しています。


アップデート

更新された質問を参照してください、ありがとう〜

4

1 に答える 1

0

HTTP 1.1 では、永続的な接続はパイプラインを許可しますが、並列処理は許可しません。( RFC 2616 を参照してください) つまり、100 個のスレッド間で接続を共有し、それぞれがファイルを送信する場合、それらの 100 個のファイルを一度に 1 つずつ (ある順序で) 送信し、送信された順序で各ファイルの応答を受信します。 . 一度に 1 つずつ送受信するために並んでいるだけなので、100 スレッドで送信しても利点はありません。

複数の接続を使用すると、複数の接続を実際に並行して実行できるため、より高速に送信できる場合があります。しかし、これは他の多くの要因に依存しています。ネットワークによっては、100 個の接続のセットアップと破棄は、1 つの接続を介したパイプライン処理よりも遅くなる場合があります。また、サーバーは、100 の個別の接続を開くことを認識しない場合があります。さらに悪いことに、サーバーは時々あなたを拒否するかもしれません.これは大きな頭痛の種です.

たとえば、5 つの永続的な接続 (5 つのスレッドのみを使用) を開き、各接続で 20 個のドキュメントを送信します。HTTPClient には、この種のことを行うためのBasicConnPoolがありますが、必要に応じて基本的すぎるかもしれません。

于 2014-01-24T07:58:55.023 に答える