Domanda

Sono nuovo in Apache HttpClient, ho usato il seguente codice per ottenere il timeout di connessione HTTP (staccato) dopo un certo intervallo di tempo:

PostMethod method = new PostMethod(authURL);
HttpClient client = new HttpClient();
HttpClientParams params= new HttpClientParams();
params.setParameter(params.CONNECTION_MANAGER_TIMEOUT, 10); //10 Nano second
client.executeMethod(method);

ma attendere per più di un minuto senza alcuna speranza di timeout / disconnessione? Dove può essere il problema?

È stato utile?

Soluzione

Ci sono 2 timeout coinvolti nella HTTPClient, cercare di impostare sia,

  client.getHttpConnectionManager().
        getParams().setConnectionTimeout(5000);
  client.getHttpConnectionManager().
        getParams().setSoTimeout(5000);

Tuttavia, i valori verranno ignorati se la connessione è bloccato in una chiamata presa nativo. Così potrebbe essere necessario eseguire la richiesta in un thread diverso in modo da poter cronometrare fuori. Vedere la mia risposta a questa domanda su come farlo,

Java Native timeout processo

Altri suggerimenti

Il timeout di Connection Manager si attiva quando l'atto di cercare di ottenere una connessione dal responsabile del collegamento richiede troppo tempo. Questa non è la stessa come il timeout per la connessione http stesso. Utilizzare HttpClientParams.setSoTimeout () al posto.

http://hc.apache.org/httpclient-3.x/apidocs/org/apache/commons/httpclient/params/HttpMethodParams.html#setSoTimeout%28int%29

Hai guardato l'impostazione SO_TIMEOUT ?

  

Imposta il timeout presa (SO_TIMEOUT)   in millisecondi da utilizzare quando   eseguire il metodo. Un valore di timeout   zero viene interpretato come un infinito   timeout.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top