Тайм-ауты клиента?может, кажется, заставить их придерживаться - PullRequest
1 голос
/ 11 июля 2010

Вот код, который я использую для создания своего многопоточного объекта httpclient.Я пытаюсь использовать 4-секундный тайм-аут по всем направлениям, так что если в течение 4 секунд ничего не происходит, чтобы отбросить запросы.Я вижу очень длительное время выполнения некоторых запросов, например, в диапазоне 300 секунд.Я не могу понять, почему это происходит.Есть идеи?

HttpParams httpParams = new BasicHttpParams();
    HttpConnectionParams.setConnectionTimeout(httpParams, 4000);
    HttpConnectionParams.setSoTimeout(httpParams, 4000);

    // set request params

    httpParams.setParameter("http.protocol.cookie-policy", CookiePolicy.BROWSER_COMPATIBILITY);
    httpParams.setParameter("http.useragent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
    httpParams.setParameter("http.protocol.wait-for-continue", 4000);

    SchemeRegistry schemeRegistry = new SchemeRegistry();
    schemeRegistry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));

    ClientConnectionManager cm = new ThreadSafeClientConnManager(httpParams,schemeRegistry);
    HttpClient httpClient = new DefaultHttpClient(cm, httpParams);

1 Ответ

0 голосов
/ 11 июля 2010

Все значения времени ожидания, которые вы устанавливаете, только пытаются ограничить время для конкретной операции, а не общее время запроса. В определенных обстоятельствах тайм-аут не работает вообще. Например, время ожидания подключения не действует, если IP-адрес заблокирован брандмауэром.

Единственное решение, которое я нашел, - это запустить мой запрос в другой ветке и самостоятельно рассчитать время. Для этого вы можете использовать ThreadPool и FutureTask. Смотрите мой ответ на этот вопрос,

Тайм-аут Java-процесса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...