Сообщения HTTP и несколько потоков в Java

Я пишу внутренний Java-апплет для загрузки файлов через HTTP. Я начал использовать встроенный ClientHttpRequest, который отлично работал, если я хочу публиковать одну за другой. Когда я пытаюсь разместить несколько потоков одновременно, что-то на стороне сервера выходит из себя, и соединение для больших файлов зависает, но при этом загружаются файлы меньшего размера. (Большой, кажется, около 10 мегабайт). После долгих поисков я не смог найти тайм-аут, который я мог бы установить для восстановления после этой ошибки, но, наконец, нашел ClientHttp от Apache, который ДЕЙСТВИТЕЛЬНО предоставляет механизм для установки тайм-аута. Проблема в том, что, хотя он утверждает, что может работать в многопоточной программе, на самом деле он выполняет только один запрос за другим. Я нашел много примеров кода для HttpClient, в котором говорится, что он будет работать для нескольких потоков, и внес изменения в мой код, чтобы включить эти изменения, но ни одно из них не имеет никакого значения, и я все еще застрял по существу с одним потоком.

Хотя для выпуска действительно не требуется несколько потоков (HttpClient, похоже, немного быстрее, чем ClientHttpRequest), было бы действительно неплохо получить дополнительный прирост скорости, поскольку есть много файлов меньшего размера, которые можно отправлять одновременно.

Файлы отправляются через HTTP, потому что мы хотим использовать ту же аутентификацию, что и уже вошедший в систему пользователь, используя их файлы cookie сеанса.

Итак, я ищу способ установить тайм-аут с помощью ClientHttpRequest или код для HttpClient, который фактически будет отправлять несколько запросов одновременно, как и было обещано.

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

Любая помощь будет принята с благодарностью, и дайте мне знать, если вам нужны какие-либо разъяснения.

В каком пакете я могу найти этот ClientHttpRequest. Сначала я подумал, что это в HttpClient Apache, затем я также проверил стандартную библиотеку J2SE.

Chry Cheng 18.03.2009 18:04
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
1
1 616
1

Ответы 1

Может помочь просмотр образца вашего кода.

Возможно, проблема в среде апплета. Вы тестируете его в appletviewer, IDE или в браузере? Браузеры обычно настраиваются так, чтобы ограничить количество подключений к одному и тому же веб-серверу до 2. Вы можете попробовать добавить main () и запустить его автономно, чтобы посмотреть, решит ли это проблему.

Другие вопросы по теме