2010-06-13 9 views
0

je ce code:org.apache.commons.httpclient.HttpClient collé sur demande

while(!lastPage && currentPage < maxPageSize){ 


      StringBuilder request = new StringBuilder("http://catalog.bizrate.com/services/catalog/v1/us/" + " some more ..."); 

      currentPage++; 
      HttpClient client = new HttpClient(new MultiThreadedHttpConnectionManager()); 
      client.getHttpConnectionManager().getParams().setConnectionTimeout(15000); 



      GetMethod get = new GetMethod(request.toString()); 

      HostConfiguration configuration = new HostConfiguration(); 

      int iGetResultCode = client.executeMethod(configuration, get); 
      if (iGetResultCode != HttpStatus.SC_OK) { 
       System.err.println("Method failed: " + get.getStatusLine()); 
       return; 
      } 
      XMLStreamReader reader 
        = XMLInputFactory.newInstance().createXMLStreamReader(get.getResponseBodyAsStream()); 
      while (reader.hasNext()) { 
       int type = reader.next(); 
      // some more xml parsing ... 
      } 
      reader.close(); 
      get.releaseConnection(); 
      } 

D'une certaine façon le code se sucent de temps en temps en ligne: demande d'exécution.

Je ne trouve pas la configuration pour une demande de délai (pas le délai de connexion), quelqu'un peut-il m'aider peut-être, ou est-ce que quelque chose que je fais est vraiment faux? Le client J'utilise.

Répondre

3

Vous pouvez également définir le temps de lecture du socket en utilisant setSoTimeout() mais ce n'est pas une garantie non plus.

La seule solution consiste à exécuter la requête dans un thread différent et à interrompre le thread après expiration du délai. Vous pouvez utiliser FutureTask pour ce faire. Voir ma réponse à cette question pour des exemples,

java native Process timeout

+0

Oui, semble que je vais devoir l'exécuter dans un autre thread .. – Roman

-1

PoolingConnectionManager maintient une limite maximale de connexion sur une base par la route et au total. Par défaut, cette implémentation ne créera pas plus de 2 connexions simultanées par route donnée et pas plus de 20 connexions au total. Pour de nombreuses applications du monde réel, ces limites peuvent s'avérer trop contraignantes, en particulier si elles utilisent HTTP comme protocole de transport pour leurs services. Les limites de connexion, cependant, peuvent être ajustées en utilisant les paramètres HTTP. Pour plus d'informations, vous pouvez consulter PoolingClientConnectionManager API Java

+1

S'il vous plaît expliquer comment cela répond à la question, ce qui est « Je ne peux pas trouver la configuration d'une demande temps libre" – DavidPostill