Como fazer com que a conexão HTTP expire/desconecte após um intervalo de tempo?
-
20-09-2019 - |
Pergunta
Eu sou novo no Apache HttpClient
, usei o seguinte código para obter o tempo limite da conexão HTTP (desconectada) após determinado intervalo de 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);
mas espera mais de um minuto sem qualquer esperança de atingir o tempo limite/desconectar?Onde pode estar o problema?
Solução
Existem 2 tempos limites envolvidos no httpclient, tente definir ambos,
client.getHttpConnectionManager().
getParams().setConnectionTimeout(5000);
client.getHttpConnectionManager().
getParams().setSoTimeout(5000);
No entanto, os valores serão ignorados se a conexão estiver presa em uma chamada de soquete nativa. Portanto, você pode precisar executar a solicitação em um tópico diferente para que você possa cronometrar. Veja minha resposta para esta pergunta sobre como fazer isso,
Outras dicas
O tempo limite do Connection Manager aciona quando o ato de tentar obter uma conexão do seu Gerenciador de conexão demora muito. Não é o mesmo que o tempo limite para a própria conexão HTTP. Use httpclientparams.setTimeout () em vez disso.
Você já olhou para a configuração SO_TIMEOUT ?
Define o tempo limite do soquete (SO_TIMEOUT) em milissegundos a serem usados ao executar o método.Um valor de tempo limite de zero é interpretado como um tempo limite infinito.