2010-05-24 5 views
1

J'essaie d'écrire une application client Http simple en Java et suis un peu confus par les manières apparemment différentes d'établir des connexions client Http, et de réutiliser efficacement les objets.Connexions client Http persistantes dans Java

actuel J'utilise les étapes suivantes (je l'ai laissé à la gestion des exceptions pour la simplicité)

Iterator<URI> uriIterator = someURIs(); 

HttpClient client = new DefaultHttpClient(); 

while (uriIterator.hasNext()) { 
    URI uri = uriIterator.next(); 

    HttpGet request = new HttpGet(uri); 

    HttpResponse response = client.execute(request); 

    HttpEntity entity = response.getEntity(); 

    InputStream content = entity.getContent(); 
    processStream (content); 
    content.close(); 
} 

En ce qui concerne le code ci-dessus, mes questions est:

En supposant tous les URI pointent vers le même hôte (mais différentes ressources sur cet hôte). Quelle est la méthode recommandée pour utiliser une connexion http unique pour toutes les demandes? Et comment fermez-vous la connexion après la dernière demande?

--edit: Je suis confus pourquoi les étapes ci-dessus utilisent jamais HttpURLConnection, je suppose client.execute() crée un, mais depuis que je vois jamais je ne suis pas sûr de savoir comment le fermer ou le réutiliser.

+0

J'ai trouvé un guide d'utilisation complet utile pour la classe HttpClient http://hc.apache.org/httpcomponents-client-4.0.1/tutorial/pdf/httpclient-tutorial.pdf – Akusete

Répondre

5

Pour utiliser une connexion persistante efficace, vous devez utiliser le gestionnaire de connexion mis en commun,

SchemeRegistry schemeRegistry = new SchemeRegistry(); 
schemeRegistry.register(
     new Scheme("http", 80, PlainSocketFactory.getSocketFactory())); 

ClientConnectionManager cm = new ThreadSafeClientConnManager(schemeRegistry); 
HttpClient httpClient = new DefaultHttpClient(cm); 

Mon plus gros problème avec HttpURLConnection est son soutien pour la connexion persistante (keep-alive) est très bogué.

+0

Merci pour l'info, pour toute personne intéressée la documentation officielle pour cela est (voir 2.8.4 Pooling connection manager) http://hc.apache.org/httpcomponents-client-4.0.1/tutorial/pdf/httpclient-tutorial.pdf – Akusete

Questions connexes