Hi experts,
I am now using httpclient to send http request, approximately 1000 requests per
seconds. I am using 3.1, and come up with following two ways, I would ask which
one will gain better performance, perhaps both have its problems(You know,
connections is closed or released or someting else) I am glad if you point it
to me, thanks.
1. Create a new HttpClient each time before sending request,as:
private HttpClient newHttpClient() {
HttpClient client = new HttpClient();
client.getHttpConnectionManager().getParams().setConnectionTimeout(TIMEOUT);
client.getHttpConnectionManager().getParams().setSoTimeout(TIMEOUT);
return client;
}
public String post(String url, String postData, String contentType) throws
IOException {
String encoding = HTTP.UTF_8;
StringRequestEntity entity = new StringRequestEntity(postData,
contentType, encoding);
PostMethod pm = new PostMethod(url);
pm.setRequestHeader("Connection", "close"); //Make sure the connection
is closed when releaseConnection is called.
pm.setRequestEntity(entity);
try {
HttpClient client = newHttpClient(); //Create a new HttpClient
client.executeMethod(pm);
String response = responseBodyAsString(pm); //consume the response
return response;
} finally {
pm.releaseConnection(); //release the connection
}
}
2. use MultiThreadedHttpConnectionManager, as following(The HttpClient is a
static instance that will be reused by many threads)
private HttpClientUtilV2() {
MultiThreadedHttpConnectionManager connectionManager = new
MultiThreadedHttpConnectionManager();
HttpConnectionManagerParams params = new HttpConnectionManagerParams();
params.setConnectionTimeout(30000);
params.setSoTimeout(30000);
params.setMaxTotalConnections(500);
params.setDefaultMaxConnectionsPerHost(500);
params.setStaleCheckingEnabled(true);
connectionManager.setParams(params);
httpClient = new HttpClient(connectionManager);
}
public String get(String url) throws IOException{
GetMethod pm = new GetMethod(url);
try {
httpClient.executeMethod(pm);
String response = responseBodyAsString(pm);
return response;
} finally {
pm.releaseConnection();
}
}
-Todd