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




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