HttpURLConnection — много запросов

Я написал сервис, который используется для регистрации некоторых данных. Эту службу можно вызывать тысячи раз. Параметры передаются через сам URL. Клиентская часть выглядит примерно так:

private String getNodeInfoFromGPSForSpecificSubscriber( int subscriberId ) throws Exception {
        String requestURLToNode = "http://" + GPSConstants.GPS_IP + ":" + GPSConstants.PORT_NUMBER + APIs.FetchASpeecificNodeAPI.FETCH_A_SPECIFIC_NODE + "?" + APIs.FetchASpeecificNodeAPI.SUBSCRIBER_ID + "=" + subscriberId;
        URL url = new URL( requestURLToNode );
        HttpURLConnection conn = ( HttpURLConnection ) url.openConnection();
        conn.setRequestMethod( "GET" );
        conn.setRequestProperty( "Accept", "application/xml" );
        conn.setDoOutput( true );
        InputStream inputStream = conn.getInputStream();


        BufferedReader in = new BufferedReader( new InputStreamReader( inputStream ) );
        String responseAsString = in.readLine();
        in.close();

        conn.disconnect();
        System.out.println( ++i );

        return responseAsString;
    }

Но здесь каждый раз, когда открывается соединение, и, следовательно, скорость, которую я получаю, составляет всего около 1 записи в секунду. Я знаю, что мне не нужно открывать соединение каждый раз, но не могу понять, как это сделать. Пожалуйста, помогите.


person LPD    schedule 11.04.2014    source источник
comment
Извините, я не понимаю вашу последнюю фразу. Что именно вы хотите узнать?   -  person hgoebl    schedule 11.04.2014
comment
Если мне нужно вызывать свой сервер несколько раз, как я могу это сделать? Приведенный выше код выдает 14/04/11 22:47:25 ERROR client.RegisterNewCell: java.net.SocketException: No buffer space available (maximum connections reached?): connect после нескольких запусков.   -  person LPD    schedule 11.04.2014
comment
Если я удалю in.close() в приведенном выше коде, он будет работать быстрее, но затем перестанет выдавать это исключение.   -  person LPD    schedule 11.04.2014
comment
Вы уверены, что не проглатываете исключения? in.close() и conn.disconnect() вызываются только в happy-path. Может быть, вам нужна более надежная обработка исключений!? Попробуйте проверенную библиотеку, например DavidWebb, или одну из перечисленных альтернатив.   -  person hgoebl    schedule 12.04.2014
comment
Исключение возникает, когда он открывает слишком много TCP-соединений. У меня нет других исключений в коде. Если я использую in.close(), скорость, которую я получаю, составляет только запрос в секунду.   -  person LPD    schedule 12.04.2014
comment
Я использовал тот же код, за исключением: conn.setRequestProperty(Accept, application/xml); conn.setDoOutput (истина); и в журнале apache я обнаружил, что с параметром get есть только 1 запрос, а без параметра get слишком много ... ?? не знаю почему?   -  person Bhuro    schedule 16.07.2016