Оптимизация HTTPS-соединения в клиенте Java - PullRequest
0 голосов
/ 06 августа 2011

Я пытаюсь связаться с RESTful API через SSL.Все клиентское приложение использует базовый метод подключения, который выглядит примерно так:

URL url = null;
       HttpsURLConnection connection = null;
       BufferedReader bufferedReader = null;
       InputStream is = null;

       try {
                url = new URL(TARGET_URL);

                HostnameVerifier hv = new HostnameVerifier() {
                     public boolean verify(String urlHostName, SSLSession session) {
                       return true;
                     }
                };

                HttpsURLConnection.setDefaultHostnameVerifier(hv);
                connection = (HttpsURLConnection) url.openConnection();

                connection.setRequestMethod(requestType);
                connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
                connection.setRequestProperty("Content-Language", "en-US");
                connection.setSSLSocketFactory(sslSocketFactory);

                is = connection.getInputStream();

                bufferedReader = new BufferedReader(new InputStreamReader(is));
                String line;
                StringBuffer lines = new StringBuffer();

                while ((line = bufferedReader.readLine()) != null) {
                    lines.append(line).append(LINE_BREAKER);
                }
                return lines.toString();
       } catch (Exception e) {
           System.out.println("Exception is :"+e.toString());
           return e.toString();
       }
     }

. Это хорошо работает, но есть ли более эффективный способ?Мы попробовали Apache HTTPClient.У него очень простой API, но когда мы сравнили производительность вышеупомянутого кода с Apache HTTPClient с YourKit, последний создавал больше объектов, чем первый.Как мне это оптимизировать?

Ответы [ 2 ]

2 голосов
/ 06 августа 2011

Я использовал HTTPClient (но не для HTTPS), но я думаю, что это относится к вашему случаю. Рекомендуется создать один HTTPClient для вашего сервера и новый объект HTTPGet за вызов. Вы захотите указать многопоточный менеджер клиентских подключений с соответствующим количеством подключений для каждого хоста и максимальным общим количеством подключений при инициализации вашего HTTPClient.

1 голос
/ 07 августа 2011

Вы также можете попробовать использовать HttpCore вместо HttpClient.HttpCore - это набор транспортных компонентов HTTP, на которых основано HttpClient.Он был специально оптимизирован для уменьшения объема памяти и производительности.Ему не хватает функции HTTP более высокого уровня, предоставляемой HttpClient (управление соединением, cookie и управление состоянием, аутентификация), но он должен быть достаточно эффективным с точки зрения использования памяти.

http://hc.apache.org/httpcomponents-core-ga/examples.html

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