2013-08-26 3 views
2

Этот вопрос связан с PoolingClientConnectionManager (HttpClient 4.2.5 API)PoolingClientConnectionManager как закрыть розетки

У меня есть максимум 5 удаленных соединений в пуле и список из более чем 20 URL, чтобы загрузить файлы. Я освобождаю соединение после загрузки файла. Но я не даю никакого значения тайм-аута. Что произойдет после загрузки файлов из 5 разных URL-адресов. Я думаю, что я собрал из документации, что 6-й файл не начнет загружаться до тех пор, пока клиент не обнаружит, что соединение было закрыто с его конца. Это так? Что я могу сделать, чтобы закрыть сокет, как только я скачал файл с URL-адреса. Обратите внимание, что все URL-адреса, с которых я загружаю файл, находятся на разных серверах.

ответ

3

Освобождение соединения к менеджеру не гарантирует его немедленного удаления. Скорее всего, менеджер попытается сохранить соединение живым. У вас есть два варианта (1), как правильно указано user2310289, возможно, вы захотите реализовать настраиваемое соединение, которое отключает соединения без разбора по их освобождению или (2 (рекомендуется)) реализует политику выборочного выселения для выключения постоянных подключений после определенный период бездействия, как описано в HttpClient tutorial

3

Согласно The HTTPClient webpage

Правильного путь

} finally { 
    // Release the connection. 
    method.releaseConnection(); 
} 

Документы также отметить, что для обеспечения выполнения закрытия соединения наиболее просто способ переопределить ConnectionManager, что в вашем случае является PoolingClientConnectionManager.

Если вы посмотрите на код на here, вы увидите, что вы можете изменить метод releaseConnection. В частности, измените строку 255, чтобы, если соединение открыто, закройте его.

+0

Так что я уже это делаю. Но где-то в документах также говорится, что после выпуска соединений соединение вернется к менеджеру, но не закрывается. В моем сценарии после того, как я загрузил 5 файлов, было бы 5 соединений с менеджером, указывающими на 5 разных серверов. Но теперь, когда я хочу загрузить 6-й файл, в пуле не будет никаких бесплатных подключений для подключения к 6-му серверу, и мне придется подождать, пока клиент не завершит соединение (что в моем случае является таймаутом соединения = 0). Я считаю, что это правильно? и что мне делать, чтобы это не происходило. – Manav

+0

Извините, я смущен, почему вы считаете, что «Освобождение соединения» и «Закрытие соединения» различны. Причина «Отпустите» соединение так, чтобы его можно было повторно использовать. Кстати, это клиент, который «освобождает» соединение –

+0

, повторно используемое для связи с тем же сервером или каким-то другим сервером? Я имею в виду, что после освобождения соединения сокет закрывается или он остается в живых? – Manav

Смежные вопросы