Я пишу многопоточный клиент REST, который использует различные API для различных целей, для выполнения этих запросов я использую HttpClient с его различными методами (GET, PUT, POST)
Поток 1:
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(url);
httpclient.execute(httppost);
methodThatNeedsHttpClient(httpclient);
public void methodThatNeedsHttpClient(HttpClient client) {
//perform other GET/POST/PUT requests
}
Поток 2:
DefaultHttpClient httpclient2 = new DefaultHttpClient();
HttpPost httppost = new HttpPost(url);
httpclient2.execute(httppost);
// Other methods
Я прочитал, что для управления httpConnections я должен использовать диспетчер соединений. I am on version 4.5 of the client, which connection manager should I be using? Как диспетчер соединений гарантирует, что соединения не протекают и используются эффективно?
Я попробовал следующую реализацию :
PoolingClientConnectionManager connectionManager = new PoolingClientConnectionManager();
connectionManager.setMaxTotal(5);
// Perform REST operations
client.getConnectionManager().shutdown();
Но я не уверен , как соединения управляются в пуле, для многопоточной системы, инициализируется ли диспетчер соединений в каждом потоке?
В большинстве случаев пул соединений должен быть общим, доступным для всех экземпляров httpClient.
При создании httpClient,
И это освободит соединение обратно в пул,
While закроет соединение,
Так как у нас есть
setConnectionManagerShared(true)
,httpClient.close()
не будет шунтировать пул соединений.