Java HttpsURLConnection исходящий лимит? - PullRequest
3 голосов
/ 30 ноября 2011

Я создаю тестовое приложение для загрузки тестового сервлета кометы, создавая группу исходящих соединений https (каждое зацикливается в своем собственном потоке).

Существует ли ограничение на число одновременных исходящих HTTP-запросов?Если да, это проблема уровня ОС (xp 32bit) или Java?Я получаю следующее исключение при запуске около 100 соединений.Ошибка возникает не сразу, а примерно через 50-150 циклов (иногда больше), что наводит меня на мысль, что на самом деле это может быть то, что я неправильно высвобождаю ресурсы:

java.net.BindException: Address already in use: connect
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
    at java.net.Socket.connect(Socket.java:529)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:559)
    at         com.sun.net.ssl.internal.ssl.BaseSSLSocketImpl.connect(BaseSSLSocketImpl.java:141)
 at sun.net.NetworkClient.doConnect(NetworkClient.java:163)
 at sun.net.www.http.HttpClient.openServer(HttpClient.java:394)
 at sun.net.www.http.HttpClient.openServer(HttpClient.java:529)
 at sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:272)
 at sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:329)
 at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:172)
 at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:916)
 at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:158)
 at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1177)
 at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:234)
 at fqexconnectiontesting.FQEXHttpClient.run(FQEXHttpClient.java:158)
 at java.lang.Thread.run(Thread.java:662)

Мой код:

while(true){
try{                    
connection =(HttpsURLConnection) url.openConnection();                    
connection.setDoOutput(true);
connection.setRequestProperty("keep-alive", "true");
connection.setRequestMethod("GET");
input = new DataInputStream( connection.getInputStream() ); 
b = new byte[4096];                    
totalBytes += input.read(b);                    
input.close();
b = null;         
connection.disconnect();                                        
connection = null;
Thread.sleep(100);
}

Любые идеи приветствуются.

Спасибо, Dazz

1 Ответ

2 голосов
/ 30 ноября 2011

По умолчанию Java открывает только до 5 постоянных подключений к одному хосту. Но ваш код использует метод disconnect (), который AFAIK предотвращает постоянные соединения.

Вам лучше прочитать документацию о Постоянные соединения . Возьмите пример кода ближе к концу для получения полностью работающего постоянного соединения.

Может быть, это решит вашу проблему.

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