Apache httpclient устанавливает много соединений - PullRequest
1 голос
/ 01 июля 2010

Я использую apache httpclient 4.0 для подключения к видеопотоку (motion jpeg) через http.Вот мой код:

DefaultHttpClient client;

HttpParams params = new BasicHttpParams();

List<String> authpref = new ArrayList<String>();
authpref.add(AuthPolicy.DIGEST);
authpref.add(AuthPolicy.BASIC);

params.setParameter("http.auth.proxy-scheme-pref", authpref);
params.setParameter("http.protocol.handle-authentication", Boolean.TRUE);

SchemeRegistry schemeRegistry = new SchemeRegistry();

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

ClientConnectionManager connectionManager =
    new ThreadSafeClientConnManager(params, schemeRegistry);

client = new DefaultHttpClient(connectionManager, params);

client.getCredentialsProvider().setCredentials(
     new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT),
     new UsernamePasswordCredentials(username, password));

HttpResponse videoResponse = client.execute(new HttpGet(url));

Проблема в том, что строка client.execute (), по-видимому, создает сотни соединений с видеопотоком.Я могу убедиться в этом, войдя на сервер и выполнив netstat: огромное количество подключений к порту 80 и все они застряли в состоянии TIME_WAIT.

Я что-то здесь не так делаю?Что происходит?

Спасибо за помощь.

1 Ответ

2 голосов
/ 02 июля 2010

Вот что происходит, если вы не освобождаете соединения обратно в пул и / или создаете новый пул соединений для каждого запроса.

http://hc.apache.org/httpcomponents-client-4.0.1/tutorial/html/connmgmt.html

...