2008-09-25 8 views
11

Mon implémentation de httpclient lève occasionnellement une exception lors de l'appel de doGetConnection(). Cependant, j'ai le délai d'attente suivantAvec Apache HttpClient, pourquoi mon délai de connexion ne fonctionne-t-il pas?

_moHttpClient.setHttpConnectionFactoryTimeout(30000); 

Il semble que mon délai d'attente ne soit pas détecté. Est-il nulle part ailleurs je dois définir un délai pour assurer ce comportement ne se reproduise plus

Répondre

7
HttpConnectionManagerParams cmparams = new HttpConnectionManagerParams(); 
    cmparams.setSoTimeout(10000); 
    cmparams.setTcpNoDelay(true); 
    HttpConnectionManager manager = new SimpleHttpConnectionManager(); 
    manager.setParams(cmparams); 
    params = new HttpClientParams(); 
    params.setSoTimeout(5000); 
    client = new HttpClient(params, manager); 

Je me demande pourquoi j'ai deux SoTimeouts différents fixés. Peut-être que j'essayais de savoir lequel était réellement actif, car j'avais les mêmes problèmes que vous quand je l'utilisais. Ce qui précède est en live code chez nous maintenant, mais je ne peux pas dire si cela fonctionne parce que c'est correct, ou parce que la providence me sourit (et l'autre extrémité est généralement toujours disponible).

4

cmparams.setSoTimeout (10000);

Celui-ci est pour tout HttpClient par défaut.

params.setSoTimeout (5000);

Et celui-ci est pour un client http particulier.

10

Quelle exception recevez-vous?

N'oubliez pas que vous avez deux timeouts pour les changements/vérifications. De HttpConnectionParams

setConnectionTimeout() 
setSoTimeout() 

afin que vous puissiez contrôler combien de temps vous attendez une connexion au serveur, et comment les opérations longues sur la prise peut prendre avant d'expirer.

+0

Les documents semblent indiquer que SO_TIMEOUT est la durée maximale autorisée pour que le serveur ne réponde plus depuis le dernier paquet TCP reçu. http://hc.apache.org/httpcomponents-core-ga/httpcore/apidocs/org/apache/http/params/CoreConnectionPNames.html#SO_TIMEOUT –