Иногда HttpURLConnection.getInputStream выполняется слишком медленно

У нас есть следующий код.
Иногда мы должны ожидать 20.10.40 секунд на последней строке.
Какова может быть проблема?

Java 1.4

URL url = ...;
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.connect();
OutputStream out = conn.getOutputStream();
ObjectOutputStream outStream = new ObjectOutputStream(out);
try
{
   outStream.writeObject(objArray);
}
finally
{
   outStream.close();
}

InputStream input = conn.getInputStream();

ОБНОВЛЕННЫЙ:
Следующий код решает проблему В Eclipse.
Но это все еще НЕ РАБОТАЕТ через Java WebStart: (

HttpURLConnection conn = (HttpURLConnection) url.openConnection();  
conn.setDoInput(true);  
conn.setDoOutput(true);  
conn.setUseCaches(false);  
System.setProperty("http.keepAlive", "false");  //<---------------
conn.connect();  

Но почему?

ОБНОВЛЕННЫЙ еще раз!
Ошибка была исправлена!:)

Мы работали с соединениями не в одном классе, а в два.
И там следует за строкой во втором классе:

URL url = ...  
HttpURLConnection conn = (HttpURLConnection) url.openConnection();  
conn.setRequestProperty("Content-Length", "1000");  //<------------
conn.connect();  

Примечание: setRequestProperty("Content-Length", "1000") первопричина проблемы.

9
задан 10 revs, 2 users 98% 13 June 2013 в 09:31
поделиться

4 ответа

'У нас была аналогичная проблема, которая вызвана ошибкой проверки активности в старой версии Java. Добавьте это перед подключением, чтобы увидеть, поможет ли это,

conn.setRequestProperty("Connection", "close");

или

System.setProperty("http.keepAlive", "false");
11
ответ дан 4 December 2019 в 10:04
поделиться

Попробуйте использовать IP-адрес. Чтобы узнать, не проблема ли это DNS.

2
ответ дан 4 December 2019 в 10:04
поделиться

Проблема может быть в чем-то на сетевом подуровне ... Ее будет трудно найти.

Но как насчет setReadTimeOut () с низким значением и цикл while?

1
ответ дан 4 December 2019 в 10:04
поделиться

Я могу предположить, что ваш DNS-сервер плохо отвечает.

Можете ли вы поэкспериментировать с заменой символьных доменных имен на числовые IP-адреса перед тем, как начать? Или вы можете выполнить каждый запрос дважды (просто для экспериментов) и посмотреть, будет ли первый запрос значительно медленнее второго?

Google установил DNS-сервер (среди прочего) на 8.8.8.8. Они утверждают, что это быстрее, чем большинство других DNS-серверов. Попробуйте!

1
ответ дан 4 December 2019 в 10:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: