Question

J'utilise commons-httpclient pour envoyer des requêtes à un serveur Web. Le serveur Web ne ferme jamais les connexions, mais il a une petite fuite de mémoire associée au contexte de connexion.

Je voudrais donc fermer les connexions persistantes de temps en temps (toutes les requêtes X par exemple), mais je ne trouve aucun moyen de le faire. J'utilise le MultiThreadedHTTPConnectionManager

Je pourrais utiliser MultiThreadedHTTPConnectionManager.closeIdleConnections (very_small_delay), mais ce n'est pas très fiable: si mon code Java a beaucoup de travail à faire, il est possible qu'aucune connexion est toujours inactif, car il y a toujours d'autres threads en attente d'une connexion gratuite .

Merci,

Était-ce utile?

La solution

après l'exécution d'une méthode, disons que GET, vous pouvez lire le numéro responsed httpStatus, de décider si un method.releaseConnection () doit être appelée.

Ou si vous savez quelle connexion vous voulez près, vous pouvez essayer

MultiThreadedHTTPConnectionManager
void    releaseConnection(HttpConnection conn) 

ok, je pensais que vous avez une raison que vous voulez « tuer » une connexion. Supposons que vous avez la connexion, l'objet HttpConnection, que vous voulez fermer à la main. cette méthode peut aider?

HttpConnection
public void close()

    Closes the socket and streams. 

Autres conseils

Pouvez-vous vous permettre d'utiliser SimpleHttpConnectionManager(boolean alwaysClose)?

httpClient.setHttpConnectionManager(new SimpleHttpConnectionManager(true))

Quand je me sers encore releaseConnections() il y a des connexions dans l'état de CLOSE_WAIT. Est-il correct si j'ajouter closeIdleConnections(0) après releaseConnections?

Est-ce que cela signifie, même si la connexion est renvoyée à la piscine pour être utilisé par d'autres clients, mais n'est pas fermé / libéré puis closeIdleConnections fermera?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top