commons-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Oleg Kalnichevski <ol...@apache.org>
Subject Re: [httpclient] how to prevent slow connection from hanging up my application?
Date Fri, 29 Jul 2005 16:43:28 GMT
On Fri, Jul 29, 2005 at 06:21:23PM +0200, Christian Hufgard wrote:
> Hi Oleg,
> 
> thank you for that hint, but I think this it not, what I am looking
> for.
> 
> Is there really nothing like "setReadTimeout(long timeout)?
> 

Really not. There's also really nothing like 
"doThatBoringJobForMe()", which I'd love to have provided for me ;-)

There's a method to set the so called socket timeout, which is the
maximum period of inactivity between two consecutive read operations. 
If you need a means to abort the request if it has not completed within
a given time limit, even if the data keeps trickling in, you have to 
provide it yourself

Oleg


> Christian
> 
> 
> Friday, July 29, 2005, 3:46:06 PM, you wrote:
> 
> > HttpMethod#abort() may be what you want. This method is threading safe,
> > so it can be safely called from an observer thread that aborts the
> > worker thread if it fails to terminate wintin the desired period of time
> 
> > Hope this helps
> 
> > Oleg
> 
> 
> > On Fri, Jul 29, 2005 at 03:38:57PM +0200, Christian Hufgard wrote:
> >> Hi,
> >> 
> >> to prevent our application from suffering when dealing with slow systems, we
> >> are using HttpClient.setTimeout() and
> >> HttpClient.setConnectionTimeout().
> >> Till today I tought, this would be enough.
> >> 
> >> Now, during some testing, I found out, that we have a legacy system that
> >> sometime tends to be really slow. We have data transfer rates below 1kB at
> >> documentsizes more then 60k.
> >> 
> >> Is there any way, to define an abort time? E.g. "read 20 seconds, if data is
> >> still missing forget about it"?.
> >> 
> >> At the moment I tend to use something like this:
> >> 
> >>       long start = System.currentTimeMillis();
> >>       int readTimeout = 20000;
> >>               
> >>       ByteArrayOutputStream dataStream = new ByteArrayOutputStream();
> >>       BufferedInputStream in = new
> >> BufferedInputStream(s.getInputStream());
> >>       byte[] data = new byte[1024];
> >>       int avail;
> >>       while ((avail = in.read(data, 0, 1024)) != -1) {
> >>               dataStream.write(data, 0, avail);
> >>               long now = System.currentTimeMillis();
> >>               if (now - start > readTimeout) {
> >>                       throw new IOException("Read timeout!");
> >>               }
> >>       }
> >> 
> >> Is there any smarter way, that I just did not find?
> >> 
> >> 
> >> 
> >> Christian
> >> 
> >> -- 
> >> GMX DSL = Maximale Leistung zum minimalen Preis!
> >> 2000 MB nur 2,99, Flatrate ab 4,99 Euro/Monat: http://www.gmx.net/de/go/dsl
> >> 
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: commons-user-unsubscribe@jakarta.apache.org
> >> For additional commands, e-mail:
> >> commons-user-help@jakarta.apache.org
> >> 
> >> 
> 
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: commons-user-unsubscribe@jakarta.apache.org
> > For additional commands, e-mail:
> > commons-user-help@jakarta.apache.org
> 
> 
> 
> -- 
> Best regards,
>  Christian                            mailto:christian.hufgard@gmx.de
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: commons-user-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: commons-user-help@jakarta.apache.org
> 
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: commons-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-user-help@jakarta.apache.org


Mime
View raw message