httpclient 无法发送两个以上的请求
httpclient unable to send more than two requests
我正在编写 Client-Server 应用程序。我在客户端使用 CloseableHttpClient
发送 GET 请求。我想向服务器发送 5 个 GET 请求。但是,只有我收到前两个请求的响应。
这是我的客户端代码:
import java.io.IOException;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
public class Test {
public static void main(String[] args) {
HttpGet getreq = new HttpGet("http://shalakha:8089/Gateway/ReverseInvokeListener");
CloseableHttpClient c1 = HttpClients.createMinimal();
try {
for(int i=0;i<5;i++){
CloseableHttpResponse resp = c1.execute(getreq);
System.out.println(resp);
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
这是我得到的回复:
HTTP/1.1 200 OK [Server: Apache-Coyote/1.1, Set-Cookie: JSESSIONID=0D4ABDC362FEC3030A5EE3709F3096FD; Path=/Gateway, CLIENTREQ: NO, Content-Length: 0, Date: Thu, 09 Apr 2015 09:22:22 GMT]
HTTP/1.1 200 OK [Server: Apache-Coyote/1.1, CLIENTREQ: NO, Content-Length: 0, Date: Thu, 09 Apr 2015 09:22:26 GMT]
其中 'CLIENTREQ' 是我在发送响应时从服务器端添加的自定义 header。
任何关于导致这种情况的原因的指示?
server.xml
中的connectionTimeout
设置为'-1'表示无限超时。
您的代码泄露了所有可用的连接(默认情况下为两个)并且耗尽了连接池。您需要关闭响应对象以确保连接被释放回池中。
http://hc.apache.org/httpcomponents-client-4.4.x/tutorial/html/fundamentals.html#d5e145
我正在编写 Client-Server 应用程序。我在客户端使用 CloseableHttpClient
发送 GET 请求。我想向服务器发送 5 个 GET 请求。但是,只有我收到前两个请求的响应。
这是我的客户端代码:
import java.io.IOException;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
public class Test {
public static void main(String[] args) {
HttpGet getreq = new HttpGet("http://shalakha:8089/Gateway/ReverseInvokeListener");
CloseableHttpClient c1 = HttpClients.createMinimal();
try {
for(int i=0;i<5;i++){
CloseableHttpResponse resp = c1.execute(getreq);
System.out.println(resp);
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
这是我得到的回复:
HTTP/1.1 200 OK [Server: Apache-Coyote/1.1, Set-Cookie: JSESSIONID=0D4ABDC362FEC3030A5EE3709F3096FD; Path=/Gateway, CLIENTREQ: NO, Content-Length: 0, Date: Thu, 09 Apr 2015 09:22:22 GMT]
HTTP/1.1 200 OK [Server: Apache-Coyote/1.1, CLIENTREQ: NO, Content-Length: 0, Date: Thu, 09 Apr 2015 09:22:26 GMT]
其中 'CLIENTREQ' 是我在发送响应时从服务器端添加的自定义 header。
任何关于导致这种情况的原因的指示?
server.xml
中的connectionTimeout
设置为'-1'表示无限超时。
您的代码泄露了所有可用的连接(默认情况下为两个)并且耗尽了连接池。您需要关闭响应对象以确保连接被释放回池中。
http://hc.apache.org/httpcomponents-client-4.4.x/tutorial/html/fundamentals.html#d5e145