Apache HTTPClient не устанавливает более двух соединений

Я пытался реализовать пул соединений для моего приложения с помощью Apache HTTPClient (v4.1). Проблема в том, что при запуске клиент всегда устанавливает только два соединения, хотя параллельных потоков достаточно. Я уже некоторое время пытаюсь изменить код, но пока ничего не помогло.
Я использую ThreadSafeClientConnManager для пула соединений и устанавливаю MaxTotal и DefaulMaxPerRoute на нужные мне значения.
Есть ли что-нибудь, что я мог бы сначала проверить?

Вот тот сегмент кода, который я использую для создания клиента.

DefaultHttpClient createClient() {
    HttpParams params = new BasicHttpParams();
    HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
    HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);

    params.setIntParameter(CoreConnectionPNames.SO_TIMEOUT, new Integer(60000));
    params.setIntParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, new Integer(60000));
    params.setBooleanParameter(CoreConnectionPNames.TCP_NODELAY, true);

    SchemeRegistry registry = new SchemeRegistry();
    registry.register(new Scheme("https", sf, 6443));
    registry.register(new Scheme("http", 80, PlainSocketFactory.getSocketFactory()));

    ThreadSafeClientConnManager cm = new ThreadSafeClientConnManager(params, registry);
    cm.setMaxTotal(2 * maxConnections);
    cm.setDefaultMaxPerRoute(maxConnections);

    HttpHost localhost = new HttpHost("localhost");
    cm.setMaxForRoute(new HttpRoute(localhost), maxConnections);

    HttpHost sdpTargetHost = new HttpHost("webserviceIP", webservicePort, "https");
    cm.setMaxForRoute(new HttpRoute(sdpTargetHost, null, true), maxConnections);

    return new DefaultHttpClient(cm, params);
}

Клиент, возвращаемый этой функцией, используется в Runnables , управляемом ThreadPoolExecutor . Runnables использует клиента и имеет следующие строки:

HttpResponse response = httpClient.execute(httpPost, context);
HttpEntity entity = response.getEntity();
....
EntityUtils.consume(entity);

Насколько я знаю, EntityUtils.consume (entity) уведомит диспетчер соединений о том, что соединение больше не используется, и, таким образом, освободит соединение, которое будет использоваться другими потоками. Так что я предполагаю, что с управлением подключением все в порядке.

Думаю, я предоставил достаточно информации, скажите, пожалуйста, если я добавлю еще что-нибудь.

Спасибо

5
задан skaffman 18 May 2012 в 18:01
поделиться