HTTPS-запросы и многопоточность - PullRequest
3 голосов
/ 13 ноября 2009

Является ли класс Java URL поточно-ориентированным, в частности [URL.openConnection()] (http://java.sun.com/javase/6/docs/api/java/net/URL.html#openConnection())?

В моем приложении я делаю десятки одновременных HTTPS-подключений в секунду к одному и тому же URL, и я хотел бы максимизировать повторное использование объекта. Тем не менее, из документации не ясно, что можно использовать повторно.

РЕДАКТИРОВАТЬ: я открыт для использования другой библиотеки, если это необходимо.

Ответы [ 3 ]

3 голосов
/ 13 ноября 2009

Да. Это потокобезопасно. Я использую его во многих темах и не нашел никаких проблем.

Обработчик Sun по умолчанию также поддерживает keep-alive по умолчанию, поэтому несколько потоков могут совместно использовать одно и то же соединение. Вы должны быть осторожны, чтобы прочитать все ответы (включая ErrorStream). В противном случае следующий запрос будет запущен в плохом состоянии.

3 голосов
/ 13 ноября 2009

Мой стандартный ответ о HTTP и java - рекомендовать Apache HttpClient . Он поддерживает HTTP 1.1, поэтому вы можете оставить эти соединения открытыми для повторного использования после успешного выполнения HTTP-запроса / ответа с сервером.

Он имеет встроенную поддержку пула соединений и документацию описывает как использовать его в многопоточном контексте.

0 голосов
/ 13 ноября 2009

URL.openConnection создаст объект HttpsURLConnection, который является подклассом HttpURLConnection. Документ для HttpURLConnection указывает, что он может использовать одно базовое соединение с сервером для статистики нескольких запросов. Я предполагаю, что это общий доступ к HTTP 1.1.

Таким образом, вы получите новый объект HttpsURLConnection с каждым вызовом URL.openConnection, но вы не получите много сетевых подключений.

...