Apache Commons HTTPClient 3.x оставляя соединения открытыми - PullRequest
1 голос
/ 01 декабря 2008

Я использую HttpClient для выполнения PostMethod с удаленным сервлетом, и по некоторым причинам многие из моих соединений остаются открытыми и загружают все соединения моего сервера.
Вот больше информации об архитектуре
Клиент GWT звонит в сервис GWT
Служба GWT создает экземпляр HttpClient, создает метод PostMethod, а клиент выполняет метод
. затем он получает входной поток, вызывая method.getResponseBodyAsStream () и записывает его в байтовый массив
затем он закрывает входной поток и очищает выходной поток байтового массива, делает еще несколько строк кода и затем вызывает method.releaseConnection ()

Должно быть что-то очевидное, что я упускаю из виду. Если я выполняю GET в браузере для той же службы, соединения немедленно закрываются, но что-то в HTTPClient заставляет их зависать открытыми.

1 Ответ

2 голосов
/ 02 декабря 2008

Вам нужно вызвать HttpMethodBase # releaseConnection (). Если вы вернете InputStream для использования позже, простой способ - обернуть его анонимным FilterInputStream, перезаписав close ():

final HttpMethodBase method = ...;
return new FilterInputStream(method.getResponseBodyAsStream())
{
  public void close() throws IOException
  {
    try {
      super.close();
    } finally {
      method.releaseConnection();
    }
  }
};
...