Время ожидания больше, чем я установил в `java.net.URLConnection` - PullRequest
1 голос
/ 09 января 2012

Я пытаюсь установить время ожидания для java.net.URLConnection следующим образом:

URL url = new URL("http://google.com");
URLConnection con = url.openConnection();
con.setConnectTimeout(2000);
con.setReadTimeout(2000);
InputStream in = con.getInputStream();
doc = new Tidy().parseDOM(in, null);
XPath xpath = XPathFactory.newInstance().newXPath();
XPathExpression expr = xpath.compile("//td//span");
Node form = (Node) expr.evaluate(doc, XPathConstants.NODE);

Проблема заключается в том, что, хотя я устанавливаю тайм-аут на 2000 (2 секунды), он ждет больше, чем он (например, 20 секунд, как я считал сам), до выдачи исключения тайм-аута.

В чем проблема?
Как я могу установить тайм-аут для работы точно на значение, которое я установил?

1 Ответ

1 голос
/ 09 января 2012

readTimeOut не работает надежно в реализации Sun (Oracle). Это даже упоминается в JavaDocs :

Некоторые нестандартные реализации этого метода игнорируют указанный тайм-аут. Чтобы увидеть установленное время ожидания чтения, пожалуйста, вызовите getReadTimeout ().

Вы можете имитировать тайм-ауты, используя потоки или таймеры, хотя. Передайте соединение дочернему потоку и попросите этот поток вызвать disconnect или что-то подобное после истечения времени ожидания.

...