HttpURLConnection внутри цикла - PullRequest
1 голос
/ 10 июня 2010

Я пытаюсь подключиться к одному URL, который, как я знаю, существует, но я не знаю, когда.У меня нет доступа к этому серверу, поэтому я ничего не могу изменить, чтобы получить событие.

Фактический код такой:

URL url = new URL(urlName);
for(int j = 0 ; j< POOLING && disconnected; j++){
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    int status = connection.getResponseCode();
    if(status == HttpURLConnection.HTTP_OK || status == HttpURLConnection.HTTP_NOT_MODIFIED){
        //Some work
    }else{
        //wait 3s
        Thread.sleep(3000);       
    }
}

Я не мой лучший навык, и яЯ не уверен, что этот код хорош с точки зрения производительности.Я открываю новое соединение каждые 3 секунды?или соединение повторно используется?

Если я позвоню для отключения (), я гарантирую, что в петле не будет открыто новых соединений, но ... это повлияет на производительность?.

Предложения?Каковы быстрые / лучшие способы узнать, существует ли URL-адрес?

Ответы [ 2 ]

0 голосов
/ 10 июня 2010

1) Используйте разъединение, вам не нужны многочисленные открытые соединения, которые вы не используете.Отказ от ресурсов, которые вы не используете, является основной практикой на любом языке.
2) Я не знаю, будет ли открытие и закрытие нового сетевого подключения каждые 3 секунды загрязнять системные ресурсы, единственный способ проверить это - попробовать.
3) Возможно, вы захотите посмотреть «ConnectException», если под «URL [не существует]» вы подразумеваете, что сервер не работает.

0 голосов
/ 10 июня 2010

Этот код в порядке с точки зрения производительности, каждый раз он создает новое соединение. В любом случае, если у вас в цикле Thread.sleep(3000), вам не нужно беспокоиться о производительности;)

Если вас беспокоит использование соединения на стороне сервера, вы можете обратиться к apache HTTP-клиенту , у него много функций. Я думаю, что он обрабатывает соединения по умолчанию.

...