В предыдущих версиях HttpClient
целевой хост устанавливался в самом клиенте. В последней версии (для HttpAsyncClient
это 4.1.1) хост настраивается на HttpRequest
(HttpGet
, HttpPost
и т. д.) каждый раз, когда я делаю запрос.
Я хочу использовать постоянное соединение, поэтому использую HttpAsyncClient
. Я создаю и использую его следующим образом:
CloseableHttpAsyncClient client = HttpAsyncClients.createDefault();
client.start();
List<Future<HttpResponse>> responses = new ArrayList<>();
for (int i = 0; i < 10; i++)
{
HttpGet get = new HttpGet("https://google.com/");
responses.add(client.execute(get, null));
}
for (Future<HttpResponse> response : responses) {
response.get(); //wait for the response
}
Как я тестировал, работает быстрее обычного HttpClient
(если делать все запросы, а потом ждать всех ответов).
Но я не могу до конца понять, как это работает внутри. Сколько соединений с https://google.com/
установлено? Что произойдет, если я использую client
для одного хоста, а затем для другого? (как я проверял, ответы могут приходить в любом порядке, поэтому я полагаю, что есть как минимум 2 параллельных соединения). В чем разница между HttpAsyncClients.createDefault()
и HttpAsyncClients.createPipelining()
?
Спасибо!