HTTP сообщения и несколько потоков в Java - PullRequest
1 голос
/ 09 октября 2008

Я пишу внутренний Java-апплет для загрузки файлов по HTTP. Я начал использовать встроенный ClientHttpRequest, который отлично работал, если я хочу публиковать один за другим. Когда я пытаюсь разместить несколько потоков одновременно, что-то на стороне сервера выходит из строя, и соединение будет зависать для больших файлов, в то же время загружая файлы меньшего размера. (Кажется, что оно составляет около 10 мегабайт). После долгих поисков я не смог найти тайм-аут, который мог бы установить для восстановления после этой ошибки, но в итоге нашел ClientHttp от Apache, который предоставляет механизм для установки тайм-аута. Проблема в том, что, хотя он утверждает, что может работать в многопоточной программе, он фактически выполняет только один запрос за другим. Я нашел много примеров кода для HttpClient, который говорит, что он будет работать для нескольких потоков, и внес изменения в мой код для включения этих изменений, но ни один из них не имеет никакого значения, и я все еще застрял по существу с 1 потоком.

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

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

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

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

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

1 Ответ

1 голос
/ 10 октября 2008

Просмотр примера кода может помочь.

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

...