Avatar billede tto78 Nybegynder
11. november 2002 - 21:41 Der er 7 kommentarer og
1 løsning

Timeout ved URLConnection

Når en URL kaldes, har jeg det problem, at der tilsyneladende ingen mulighed er for at ændre TIMEOUT indstillingerne. Hvis følgende udføres:

URL u = new URL("http://127.0.0.1/test.asp")
URLConnection uc = u.openConnection();
...

så venter systemet indtil den kaldte adresse svarer eller der opstår TIMEOUT. Timeout'et er blot sat til 5 min. pr. default, hvilket er alt for meget til mit brug og jeg kan ikke finde en evt. mulighed for at sætte dette ned. Jeg leder efter noget ala setSoTimeout(x)-metoden på Socket klassen, der får read()-metoden på InputStream'en til at kaste en InterruptedIOException, hvis den angivne timeout passerer.

PS. Problemet eksisterer kun i tilfælde af at remote systemet ikke svarer, eller svarer langsomt. Evt. kald til ikke-eksisterende adresser m.v. afvises med en exception øjeblikkeligt.
Avatar billede disky Nybegynder
11. november 2002 - 22:02 #1
Kig på JDK1.4 det tillader styring af timeouts på sockets osv, mener jeg.
Avatar billede spoink Nybegynder
11. november 2002 - 22:05 #2
Avatar billede disky Nybegynder
11. november 2002 - 22:12 #3
Ki evt. på Socket's istedet den har timeout:

setSoTimeout
public void setSoTimeout(int timeout)
                  throws SocketExceptionEnable/disable SO_TIMEOUT with the specified timeout, in milliseconds. With this option set to a non-zero timeout, a read() call on the InputStream associated with this Socket will block for only this amount of time. If the timeout expires, a java.net.SocketTimeoutException is raised, though the Socket is still valid. The option must be enabled prior to entering the blocking operation to have effect. The timeout must be > 0. A timeout of zero is interpreted as an infinite timeout.

Parameters:
timeout - the specified timeout, in milliseconds.
Throws:
SocketException - if there is an error in the underlying protocol, such as a TCP error.
Since:
JDK 1.1
See Also:
getSoTimeout()
Avatar billede disky Nybegynder
11. november 2002 - 22:54 #4
en årsag til afvisning tak, ellers er det svært at hjælpe.
Avatar billede tto78 Nybegynder
11. november 2002 - 23:01 #5
Jeg skrev, at jeg leder efter noget ALA Socket's setSoTimeout(), så jeg er godt klar over dennes eksistens, uden at det dog har hjulpet mig sønderligt (jeg har også API'et). Jeg kunne lave en HTTP klient selv, men da URLConnection har hvad jeg skal bruge, på nær custom timeout, er det noget i denne stil jeg søger. Helst uden at skulle skrive en større workaround, der måske alligevel ikke duer i næste release (jf. spoink's link). JDK1.4 er desværre et større skridt end jeg vil tage ifm. denne opgave da det vil kræve test og migrering af et større system. Platformen er lige nu JDK1.3.1(_03).
Avatar billede disky Nybegynder
11. november 2002 - 23:13 #6
Når du ikke vil følge med udviklingen af Java, i form af at bruge Jdk1.4.
Så er der kun en større workaround der kan løse dit problem.

Eller du kan se hvordan jdk1.4 implementere dette og så bruge deres fremgangsmåde.

Bortset fra det er det en stor fordel af bruge 1.4 både med stabilitet og performance.
Avatar billede davsclaus Nybegynder
14. november 2002 - 12:59 #7
Hej

Jeg brugte kode fra nedenstående sidste år til en webløsning som kører i WebLogic som skulle "snakke" med andre webservere og der skulle være timeout på. Ja det kører stadig, og det kører under JDK1.3.

http://www.logicamente.com/sockets.html

Jeg mener også at Jakarta har en HttpClient hvor det er muligt med timeout

http://jakarta.apache.org/commons/httpclient/
http://nagoya.apache.org/gump/javadoc/jakarta-commons/httpclient/dist/docs/api/index.html
Avatar billede tto78 Nybegynder
14. november 2002 - 15:17 #8
Apache HTTP klienten lader til at løse problemet uden behov for store ændringer, så jeg takker.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester