2013-11-28 15 views
16

Ich verwende Http Apache Components, um die HTTP-Interaktionen durchzuführen. Ich muss meinen http-Client anpassen. Zu diesem Zweck habe ich zwei Parameter: Verbindungstimeout und Timeout der Verbindungsanforderung. In Bibliotheksdokumentation und im Quellcode (keine Kommentare gefunden) habe ich keine Definition dieser Begriffe gefunden. Ich muss wissen, was genau sie bedeuten. Möglicherweise wurden sie in der HTTP-Protokolldokumentation definiert, aber ich kann sie nicht finden. Also, meine Frage ist, was bedeuten diese beiden Begriffe und wie unterscheiden sie sich voneinander.Zeitlimit für Verbindung und Verbindungsanforderung

+0

Versuchen Sie, sie ohne Apache oder Java zu durchsuchen keywords: http://en.wikipedia.org/wiki/Timeout_(computing) –

Antwort

19

HttpClient hat eine Art Verbindung und Buchse Timeout einzustellen (setConnectionTimeout() und setTimeout()) nach http://hc.apache.org/httpclient-3.x/apidocs/org/apache/commons/httpclient/HttpClient.html

Connection timeout ist die Timeout, bis eine Verbindung mit dem Server hergestellt wird.

Socket timeout ist das Zeitlimit für den Empfang von Daten (Socket-Timeout).

Beispiel:

Lassen Sie uns sagen Sie Ihren Browser zeigen eine Web-Seite zuzugreifen. Wenn der Server in X Sekunden nicht anwächst, wird ein Verbindungstimeout auftreten. Wenn die Verbindung jedoch hergestellt wird, beginnt der Server mit der Verarbeitung des Ergebnisses für den Browser. Wenn diese Verarbeitung nicht innerhalb von Y Sekunden beendet wird, tritt ein Socket-Timeout auf.

+6

Vielen Dank für Ihre Antwort, aber ich habe immer noch ein Problem. Hier ist Request Config Builder http://hc.apache.org/httpcomponents-client-4.3.x/httpclient/apidocs/org/apache/http/client/config/RequestConfig.Builder.html und es hat drei Methoden setConnectionRequestTimeout, setConnectTimeout , setSocketTimeout (und keine Kommentare!). Ich weiß also immer noch nicht, was genau jede Methode macht und welche Methoden ich anwenden sollte. – mvb13

+18

Ok, ich habe schließlich festgestellt, dass getConnectionRequestTimeout imeout in Millisekunden zurückgibt, wenn eine Verbindung vom Verbindungsmanager angefordert wird. Ich nehme an, dass Verbindungsmanager apache-httpcomponents-Bibliotheksklasse ist, also werde ich sie nicht benutzen. Ich werde setConnectionTimeout() und setTimeout() verwenden. – mvb13

4

Für die Nachwelt, in HttpClient 4.X.X, das folgende ist, wie Sie einen Client erstellen, der eine bestimmte connectTimeoutMillis und requestTimeoutMillis verwendet.

HttpClientBuilder clientBuilder = HttpClientBuilder.create(); 
RequestConfig.Builder requestBuilder = RequestConfig.custom(); 
requestBuilder = requestBuilder.setConnectTimeout(connectTimeoutMillis); 
requestBuilder = requestBuilder.setConnectionRequestTimeout(requestTimeoutMillis); 
clientBuilder.setDefaultRequestConfig(requestBuilder.build()); 
CloseableHttpClient httpClient = clientBuilder.build(); 
... 

Btw, die Javadocs für diesen Code saugt. Versuchen Sie, mit der Hand herauszufinden, wie Sie den Config-Builder verwenden. Heiliger Strohsack.

Verwandte Themen