1

HttpClient を使用してリモート サーブレットに対して PostMethod を実行していますが、何らかの理由で多くの接続が開いたままになり、サーバーのすべての接続が占有されています。 GWT クライアントが GWT サービスに呼び出す
アーキテクチャの詳細 は次のとおりです。 GWT サービスは HttpClient をインスタンス化し、PostMethod を作成し、クライアントにメソッドを実行させます 。次に、method.getResponseBodyAsStream() を呼び出して入力ストリームを取得し、それをバイト配列に書き込みます。 次に、入力ストリームを閉じ、バイト配列出力ストリームをフラッシュし、さらに数行のコードを実行してから、method.releaseConnection() を呼び出します。




これを引き起こしているのは、私が見落としている明らかな何かがあるに違いありません。ブラウザーで同じサービスに対して GET を実行すると、接続はすぐに閉じますが、HTTPClient に関する何かがハングアップの原因となっています。

4

1 に答える 1

2

HttpMethodBase#releaseConnection() を呼び出す必要があります。後で使用するために InputStream を返す場合、単純な方法は、close() を上書きする匿名の FilterInputStream によってラップすることです。

final HttpMethodBase method = ...;
return new FilterInputStream(method.getResponseBodyAsStream())
{
  public void close() throws IOException
  {
    try {
      super.close();
    } finally {
      method.releaseConnection();
    }
  }
};
于 2008-12-02T08:17:26.383 に答える