Лучшая практика для Использования HttpClient в многопоточной среде

ООП является более высоким уровнем абстракции, программист не может действительно приехать для схватывания его, если у него нет хорошего понимания нормального (чтение: процедурный) способ запрограммировать, и он должен смочь записать некоторые программы, которые делают что-то полезное.

Для меня это взяло серию нескольких лекций одним из моего университета профессора, где он обсудил много теоретических аспектов программирования, он пытался убедить нас, что программирование об управлении данными, и что эти данные являются представлением "состояния (состояний)" программы и некоторым другим абстрактным материалом, который я забыл теперь! Но точка, трудно понять ООП без некоторого теоретического абстрактного обсуждения сначала, и это обсуждение не имело бы никакого смысла человеку, у которого не было опыта при написании некоторого реального кода.

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

82
задан one stevy boi 25 April 2016 в 20:29
поделиться

3 ответа

Метод A рекомендован сообществом разработчиков httpclient.

См. http://www.mail-archive.com/ httpclient-users@hc.apache.org / msg02455 .html для получения дополнительных сведений.

17
ответ дан 24 November 2019 в 09:20
поделиться

Насколько я понимаю, HttpConnection не рассматривается как потокобезопасный, и, следовательно, MultiThreadedHttpConnectionManager предоставляет многоразовый пул HttpConnections, у вас есть один MultiThreadedHttpConnectionManager, совместно используемый всеми потоками и инициализированный ровно один раз. Итак, вам нужно внести несколько небольших уточнений в вариант A.

MultiThreadedHttpConnectionManager connman = new MultiThreadedHttpConnectionManag

Затем каждый поток должен использовать последовательность для каждого запроса, получать соединение из пула и возвращать его по завершении своей работы - использование блока finally может быть хорошим . Вы также должны указать возможность того, что в пуле нет доступных соединений, и обработать исключение тайм-аута.

HttpConnection connection = null
try {
    connection = connman.getConnectionWithTimeout(
                        HostConfiguration hostConfiguration, long timeout) 
    // work
} catch (/*etc*/) {/*etc*/} finally{
    if ( connection != null )
        connman.releaseConnection(connection);
}

Поскольку вы используете пул соединений, вы фактически не будете закрывать соединения, и поэтому это не должно привести к проблеме TIME_WAIT. Этот подход предполагает, что каждый поток не остается в соединении надолго. Обратите внимание, что сам мошенник остается открытым.

13
ответ дан 24 November 2019 в 09:20
поделиться

Я думаю, вы захотите использовать ThreadSafeClientConnManager.

Вы можете увидеть, как это работает, здесь: http://foo.jasonhudgins.com/2009/08/http-connection-reuse-in-android.html

Или в AndroidHttpClient , который использует его для внутренних целей.

5
ответ дан 24 November 2019 в 09:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: