Avatar billede mik28 Seniormester
08. juli 2010 - 16:23 Der er 6 kommentarer og
1 løsning

HTTPClient og hvordan timeouts virker

Hej Eksperter

Jeg er ærlig talt blevet lidt i tvilv om hvordan timeouts virker. Jeg bruger nedenstående kode til at teste (i princippet)

<%
    HttpClient client = new HttpClient();

    client.getHttpConnectionManager().getParams().setConnectionTimeout(100);
    client.getHttpConnectionManager().getParams().setSoTimeout(200);

    String url = "DER_HVOR_XML_HENTES";
    GetMethod method = new GetMethod(url);
   
    try{
    client.executeMethod(method);
    }
    catch (Exception e){
    out.print("Exception er: "+e);
    }
    String s = method.getResponseBodyAsString();
   
    try {
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    Document trae = factory.newDocumentBuilder().parse(new InputSource(new StringReader(s)));

    NodeList bla = XPathAPI.selectNodeList(trae, "DER/HVOR/LISTEN/ER/text()");

    for (int i = 0; i < bla.getLength(); i++) {
      out.print(bla.item(i).getNodeValue());
    }

    }catch (Exception e) {   
      out.print("Exception er: "+e);
  }
%>

Det er:

client.getHttpConnectionManager().getParams().setConnectionTimeout(100);
client.getHttpConnectionManager().getParams().setSoTimeout(200);

og deres effekt som jeg er usikker på. Jeg troede at setConnectionTimeout(100); betyd at time to first byte skulle være 100 ms og at setSoTimeout(200); betød at der højst måtte gå 200 ms inden alt data skulle være modtaget. Nu oplever jeg at den første kan være 300 og den anden 200 uden at jeg får en timeoutexception. Hvad skyldes det?
Avatar billede arne_v Ekspert
08. juli 2010 - 16:33 #1
Connection timeout er vel til at connection er successfuld. Der kan godt etableres connection og saa kommer foerste byte senere. HTTP er TCP og har dermed et egentligt connection begreb.

Derudover skal du vaere klar over at paa multitasking systemer som Windows, Linux etc. kan en anden process godt sidde paa CPU'en naar tiden udloeber og dit program faar foerst kontrol igen lidt senere.
Avatar billede arne_v Ekspert
08. juli 2010 - 16:34 #2
SO timeout er vist ioevrigt "nogen data" ikke "alle data".

Stor forskel !
Avatar billede mik28 Seniormester
10. juli 2010 - 11:06 #3
Det forstår jeg ikke helt. Betyder det ikke bare at forbindelsen bliver lukket under alle omstændigheder.
Avatar billede arne_v Ekspert
10. juli 2010 - 16:00 #4
Det spørgsmål forstod jeg ikke.
Avatar billede mik28 Seniormester
11. juli 2010 - 15:36 #5
Jeg tror nok jeg har forstået det.

setConnectionTimeout definere tiden til der skal være kommet et svar.
setSoTimeout definere tiden til forbindelsen bliver lukket
Avatar billede mik28 Seniormester
12. juli 2010 - 13:52 #6
Jeg har fået svar på mit spørgsmål. Du må meget gerne lægge et svar
Avatar billede arne_v Ekspert
12. juli 2010 - 16:28 #7
svar
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