Frage

Ich benutze commons-Httpclient zu senden Anfragen an einen Web-Server. Der Web-Server schließt nie Verbindungen, hat aber einen kleinen Speicherverlust an den Verbindungskontext verknüpft.

Ich mochte daher die persistenten Verbindungen von Zeit zu Zeit (alle X-Abfragen zum Beispiel) zu schließen, aber ich fand keinen Weg, dies zu tun. Ich verwende die MultiThreadedHTTPConnectionManager

konnte ich MultiThreadedHTTPConnectionManager.closeIdleConnections (very_small_delay) verwenden, aber das ist nicht sehr zuverlässig: wenn mein Java-Code viel Arbeit zu tun hat, dann ist es möglich, dass keine Verbindung immer frei ist, denn es gibt immer andere Threads für eine freie Verbindung wartet .

Danke,

War es hilfreich?

Lösung

nach einer Methode ausgeführt wird, lassen Sie uns sagen, können Sie die responsed Httpstatus Nummer lesen, zu entscheiden, ob ein method.releaseConnection () aufgerufen werden muss.

Oder wenn Sie wissen, welche Verbindung Sie schließen wollen sie zu, könnten Sie versuchen,

MultiThreadedHTTPConnectionManager
void    releaseConnection(HttpConnection conn) 

okay, ich dachte, dass Sie einen Grund haben, dass Sie zu ‚töten‘ wollen eine Verbindung. Angenommen, Sie die Verbindung haben, die Httpconnection-Objekt, das Sie in der Hand schließen möchten. Dieses Verfahren kann helfen?

HttpConnection
public void close()

    Closes the socket and streams. 

Andere Tipps

Können Sie verwenden SimpleHttpConnectionManager(boolean alwaysClose) leisten?

httpClient.setHttpConnectionManager(new SimpleHttpConnectionManager(true))

Wenn ich releaseConnections() bin immer noch gibt es Verbindungen in CLOSE_WAIT Zustand. Ist es in Ordnung, wenn ich closeIdleConnections(0) nach releaseConnections hinzufügen?

Wird diese Mittel auch wenn die Verbindung an den Pool zurückgeschickt von anderen Clients verwendet werden, ist aber nicht geschlossen / freigegeben, dann wird closeIdleConnections es schließen?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top