1

我正在使用 HttpClient 对远程 servlet 执行 PostMethod,由于某种原因,我的许多连接都处于打开状态并占用了我所有服务器的连接。
这是有关架构的更多信息
GWT 客户端调用 GWT 服务
GWT 服务实例化一个 HttpClient,创建一个 PostMethod 并让客户端执行该方法
,然后通过调用 method.getResponseBodyAsStream() 获取输入流并将其写入字节数组
然后它关闭输入流并刷新字节数组输出流,再执行几行代码,然后调用 method.releaseConnection()

必须有一些明显的我忽略的东西导致了这种情况。如果我在浏览器中对同一服务执行 GET,则连接会立即关闭,但有关 HTTPClient 的某些内容会导致它们挂起。

4

1 回答 1

2

您需要调用 HttpMethodBase#releaseConnection()。如果你返回一个 InputStream 供以后使用,一个简单的方法是通过一个匿名的 FilterInputStream 覆盖 close() 来包装它:

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 回答