Reputation: 163
I have a question and it is What is httpconnection of PoolingHttpClientConnectionManager?.
I know that If we use PoolingHttpClientConnectionManager
, it reduces the time for spending connection establishment (such as ssl handshake
, tcp enter code herehandshake
etc) because it reuses the connections.
However, what I understand about http connection reusing is keep-alive and we can use it when server support it. If host doesn't support keep-alive connection, we cannot communicate with the host with keep-alive.
So, here are my questions,
If I use PoolingHttpClientConnectionManager to manage connections on non keep-alive server environment, does Connectionmanager manage connections? or it creates connection per request?
If ConnectionManager manages connections, how ConnectionManager keep connection? does the manager send bytes periodically?
Upvotes: 1
Views: 5269
Reputation: 58772
If you don't define HttpClient will act as connection can be kept alive indefinitely, from Apache http docs:
If the Keep-Alive header is not present in the response, HttpClient assumes the connection can be kept alive indefinitely.
If you want to define Keep-Alive Strategy see example:
ConnectionKeepAliveStrategy myStrategy = new ConnectionKeepAliveStrategy() {
@Override
public long getKeepAliveDuration(HttpResponse response, HttpContext context) {
HeaderElementIterator it = new BasicHeaderElementIterator
(response.headerIterator(HTTP.CONN_KEEP_ALIVE));
while (it.hasNext()) {
HeaderElement he = it.nextElement();
String param = he.getName();
String value = he.getValue();
if (value != null && param.equalsIgnoreCase
("timeout")) {
return Long.parseLong(value) * 1000;
}
}
return 5 * 1000;
}
};
Upvotes: 2