IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

[HttpClient 4.0] Comment fermer les connexions ?


Sujet :

Java

  1. #1
    Futur Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Décembre 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2008
    Messages : 11
    Points : 8
    Points
    8
    Par défaut [HttpClient 4.0] Comment fermer les connexions ?
    Bonjour,
    Je suis en train de développer une petite appli pour faire une tâche de conversion de donnée. J'utilise HttpClient pour ça, mais le problème c'est que les connexions ne se ferment pas rapidement (juste après l'obtention des données), ce qui fait que je me retrouve parfois avec plus de 800 sockets ouvertes sur le même serveur.

    Voilà le code de ma méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    public static String postURL(String url, HashMap<String, String> params) throws XedixException {
    		DefaultHttpClient client = new DefaultHttpClient();
    		HttpPost post = new HttpPost(url);
    		String response = null;
    		ArrayList<BasicNameValuePair> parameters = new ArrayList<BasicNameValuePair>();
    		for (String p : params.keySet())
    			parameters.add(new BasicNameValuePair(p, params.get(p)));
    		try {
    			UrlEncodedFormEntity entity = new UrlEncodedFormEntity(parameters);
    			post.setEntity(entity);
    			// Définition du Handler pour la réponse Http
    			ResponseHandler<byte[]> handler = new ResponseHandler<byte[]>() {
    				public byte[] handleResponse(HttpResponse response) throws ClientProtocolException, IOException {
    					HttpEntity entity = response.getEntity();
    					if (entity != null)
    						return EntityUtils.toByteArray(entity);
    					else
    						return null;
     
    				}
    			};
    			System.out.println("REQUESTING " + post.getURI().toURL().toString() + " with parameters :");
    			for(String k : params.keySet())
    				System.out.println("\t- " + k + " : " + params.get(k));
    			long t = System.currentTimeMillis();
    			response = new String(client.execute(post, handler));
    			System.out.println("(Duration : " + (System.currentTimeMillis() - t) + "ms)\nRESPONSE :\n" + response);
    			post.abort();
    			return response;
    		} catch (UnsupportedEncodingException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (ClientProtocolException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		return null;
    	}
    Le post.abort() n'a pas l'air de fermer les connexions correctement ou en tout cas, pas assez vite. La doc ne m'a pas énormément aidée sur le sujet et je suis surtout tombé sur le PostMethod#releaseConnection() de la version 3 d'HttpClient.

    Outre coder son propre client Http, serait-il possible de fermer les connexion juste après la lecture du résultat côté client ?

  2. #2
    Membre expérimenté
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 047
    Points : 1 640
    Points
    1 640
    Par défaut
    client.getConnectionManager().shutdown() ou un truc comme ça de mémoire
    edit : pour fermer la connexion après chaque transfert, il faut fermer les flux c'est à dire extraire les données de l'entité contenue dans la réponse et fermer le flux associé.

Discussions similaires

  1. [SQL-Server] BACKUP - Fermer les connexions de force
    Par Drahu dans le forum Administration
    Réponses: 12
    Dernier message: 28/07/2009, 23h49
  2. Réponses: 4
    Dernier message: 20/05/2008, 08h39
  3. Réponses: 2
    Dernier message: 03/04/2007, 11h23
  4. Comment fermer les accolades automatiquement
    Par _LVEB_ dans le forum Visual C++
    Réponses: 3
    Dernier message: 18/02/2007, 22h47
  5. Réponses: 1
    Dernier message: 03/11/2006, 17h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo