使用httpclient连接持久性

muc*_*noj 3 java performance persistence httpclient apache-httpclient-4.x

我使用httpclient.execute(请求)对同一个URL执行多个请求.我可以为连续请求重新使用连接吗?如何在不重复声明HttpClient的情况下优化代码.

for(int i=0;i<=50;i++)
{
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet("my_url");
HttpResponse response = client.execute(request);
System.out.println(response.getStatusLine().getStatusCode());
}
Run Code Online (Sandbox Code Playgroud)

Lui*_*oza 8

为了在你的代码中使用单个客户端(基于Exception使用HttpRequest.execute():无效使用SingleClientConnManager:仍然分配连接和Lars Vogel Apache HttpClient - 教程):

  • 步骤1.将客户端生成移到外部for-loop.
  • 步骤2.您应该阅读响应内容并关闭流.如果您不这样做,您将收到以下异常

    Exception in thread "main" java.lang.IllegalStateException: 
        Invalid use of SingleClientConnManager: connection still allocated.
    
    Run Code Online (Sandbox Code Playgroud)

在代码中:

//step 1
HttpClient client = new DefaultHttpClient();
for(int i=0;i<=50;i++) {
    HttpGet request = new HttpGet("my_url");
    HttpResponse response = client.execute(request);
    System.out.println(response.getStatusLine().getStatusCode());
    //step 2
    BufferedReader br = new BufferedReader(
        new InputStreamReader(response.getEntity().getContent()));
    //since you won't use the response content, just close the stream
    br.close();
}
Run Code Online (Sandbox Code Playgroud)