Клиент выпуска зависает навсегда, когда у сервера возникает проблема (может быть сброс сокета) во время вызова гессиана

У меня клиент звонит на сервер через Hessian. В это время сервер нестабилен и обычно возникает ошибка сброса сокета. И клиент завис в журнале ниже. Итак, как я могу освободить этот журнал, но при этом поддерживать работу приложения. И в чем причина того, что клиент зависает навсегда? Спасибо

на java.net.SocketInputStream.socketRead0 (собственный метод) на java.net.SocketInputStream.read (неизвестный источник) на java.io.BufferedInputStream.fill (неизвестный источник) на java.io.BufferedInputStream.read1 (неизвестный источник) на java .io.BufferedInputStream.read(неизвестный источник) — заблокирован ‹0x2159c988> (java.io.BufferedInputStream) на sun.net.www.http.HttpClient.parseHTTPHeader(неизвестный источник) на sun.net.www.http.HttpClient. parseHTTP (неизвестный источник) на sun.net.www.http.HttpClient.parseHTTPHeader (неизвестный источник) на sun.net.www.http.HttpClient.parseHTTP (неизвестный источник) на sun.net.www.protocol.http.HttpURLConnection. getInputStream (неизвестный источник)


person Loc Phan    schedule 12.04.2011    source источник
comment
какая реализация гессиана?   -  person Robin Green    schedule 12.04.2011
comment
Я полагаю, это весна.... :|   -  person Loc Phan    schedule 12.04.2011
comment
Вы уверены, что сеть работает нормально? возможно, это проблема надежности сети.   -  person Robin Green    schedule 12.04.2011
comment
Сеть вроде в порядке. Но я не уверен. Почему клиент был заблокирован навсегда? Тем не менее, их другой поток в клиентском приложении все еще мог нормально подключаться к этому серверу после этого.   -  person Loc Phan    schedule 12.04.2011


Ответы (1)


По умолчанию HttpUrlConnection не имеет тайм-аутов. Для этого вам нужно установить системные свойства Java:

http://docs.oracle.com/javase/7/docs/technotes/guides/net/properties.html

sun.net.client.defaultConnectTimeout (default: -1)
sun.net.client.defaultReadTimeout (default: -1)

Установите его из командной строки:

-Dsun.net.client.defaultReadTimeout=30000 -Dsun.net.client.defaultConnectTimeout=30000

Или из кода Java:

System.setProperty("sun.net.client.defaultReadTimeout", "30000");
System.setProperty("sun.net.client.defaultConnectTimeout", "30000");
person pkmk    schedule 08.04.2016