требуется реализовать многопоточный upload файлов из сервлет
От: tanja_me Австралия  
Дата: 08.08.07 02:17
Оценка:
пишу на форум первый раз, так что извините если что не так (чукча более читатель)
требуется реализовать многопоточный upload файлов, вызываемый из сервлета
веб-страничке дается список файлов и жмется кнопка "upload". запускается сервлет, который создает штук 5 тредов, которые берут по очереди файлы из списка, загружают на сервер, обрабатывают и складывают в базу

какие есть готовые решения, паттерны или почитать на эту тему?

в multithreading у меня опыта 0, читаю http://java.sun.com/docs/books/tutorial/essential/concurrency/index.html, много думаю... наверно туплю, подскажите, с какой стороны подойти? как их синхронизовать?
Re: требуется реализовать многопоточный upload файлов из сер
От: Gangsta  
Дата: 08.08.07 07:35
Оценка:
Здравствуйте, tanja_me, Вы писали:

_>пишу на форум первый раз, так что извините если что не так (чукча более читатель)

_>требуется реализовать многопоточный upload файлов, вызываемый из сервлета

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

Например, твой сервер называется tanja.ru, тогда сервера должны быть типа
srv01.tanja.ru
srv02.tanja.ru
...
srv05.tanja.ru

Не знаю как там с безопасностью java-апплетов, но мне кажется, что апплет по умолчанию имеет право коннектится только к серверу, с которого он загружен. Это тоже необходимо учесть. В общем, посмотри эти ограничения, перед тем как что-то делать.
Re: требуется реализовать многопоточный upload файлов из сер
От: sh_san Украина  
Дата: 08.08.07 22:47
Оценка:
_>требуется реализовать многопоточный upload файлов, вызываемый из сервлета
_>веб-страничке дается список файлов и жмется кнопка "upload". запускается сервлет, который создает штук 5 тредов, которые берут по очереди файлы из списка, загружают на сервер, обрабатывают и складывают в базу

Здесь такая проблемка — сервлет отвечает только за поведение сервера — что он выдаст клиенту в ответ на его запрос.
Кнопочка "upload", диалог выбора файла, и метод передачи файла на сервер контролируются браузером.

В настоящий момент изменить поведение браузера можно следующим образом:
1. Используя Java-applet при установленой Java у пользователя
2. Используя ActiveX при использовании Internet Explorer
3. Используя XUL на Mozila браузерах.
4. Используя JavaScript.

Самый универсальный — последний вариант. Все остальные из за ограничений, накладываемых на ПО пользователя применяют в особых случаях
Следовательно, задача сводится к тому, чтобы найти готовый JavaScript с описанием серверной части, или же с готовыми реализациями скриптов для конкретной серверной платформы. Здесь Вам придёться воспользоваться поисковиком с ключевыми словами "fileupload" и названием вашего языка программирования. Я сходу пару десятков отдельных компонетов или фреймворков с такими компонентами нашел.

Ну, а дальше, — напильник в руки и — Вперёд!

Что касается такой постановки задачи — думаю это будет проблематично.

Насколько я заметил, диалоги выбора файлов в JavaScript позволяют выбирать только один файл (конечно есть ещё IE, с его прямым доступом к файловой системе клиента через ActiveXObject("Scripting.FileSystemObject"), но сейчас вроде Firefox в лидеры выбивается ).

Кроме того, как здесь уже заметили, создание нескольких параллельных сессий от одного клиента не очень приветствуется, из-за бесполезной нагрузки на сервер (всё равно основной тормоз — это канал, а файлы можно передать и последовательно).
Re: спасибо!!!!
От: tanja_me Австралия  
Дата: 09.08.07 01:41
Оценка:
огромное спасибо за подсказки, буду думать!
похоже, грузить файлы придется постедовательно, а уже обрабатывать параллельно, т.к. решение надо сделать быстро и чтоб работало
Re[2]: требуется реализовать многопоточный upload файлов из
От: GarryIV  
Дата: 11.08.07 02:24
Оценка:
Здравствуйте, Gangsta, Вы писали:

G>Татьяна,

G>учти, что по официальной документации к протоколу HTTP ты не можешь создавать более двух соединений с сервером одновременно. Поэтому тебе или нужно ограничиться двумя потоками, или сделать пяток (для надежности) виртуальных серверов, которые (тем не менее) будут указывать на один экземпляр.

Можно цитату из документации?
WBR, Igor Evgrafov
Re[2]: требуется реализовать многопоточный upload файлов из
От: Maxim S. Shatskih Россия  
Дата: 17.08.07 00:56
Оценка:
G>учти, что по официальной документации к протоколу HTTP ты не можешь создавать более двух соединений с сервером одновременно.

IE/WinInet на это кладет, и все работает.

Но тем не менее отказ в коннекте я бы обработал.
Занимайтесь LoveCraftом, а не WarCraftом!
Re[3]: требуется реализовать многопоточный upload файлов из
От:  
Дата: 17.08.07 10:13
Оценка:
Hello, Maxim!
You wrote on Fri, 17 Aug 2007 00:56:32 GMT:

G>> учти, что по официальной документации к протоколу HTTP ты не

G>> можешь создавать более двух соединений с сервером одновременно.

MSS> IE/WinInet на это кладет


Это не так.
How to configure Internet Explorer to have more than two download sessions
WinInet limits connections per server
Posted via RSDN NNTP Server 2.1 beta
Re[4]: требуется реализовать многопоточный upload файлов из
От: Maxim S. Shatskih Россия  
Дата: 17.08.07 16:15
Оценка:
YК>Это не так.
YК>How to configure Internet Explorer to have more than two download sessions
YК>WinInet limits connections per server

Надо же. Переделали.

Несколько лет назад я смотрел netstatом на юниксном сервере, сколько коннектов создало скачивание всего одной среднего уровня странички в IE. Штук пять точно было.
Занимайтесь LoveCraftом, а не WarCraftом!
Re[2]: спасибо!!!!
От: Maxim S. Shatskih Россия  
Дата: 17.08.07 16:26
Оценка:
_>похоже, грузить файлы придется постедовательно, а уже обрабатывать параллельно, т.к. решение надо сделать быстро и чтоб работало

Все файлы грузятся с одного сервера? или с нескольких?

Если с одного — то многонитевость не даст выигрыша. Понимаете ли, интернетовский маршрут между первой и второй машиной не станет шире от того, что вы породили кучу нитей.

Я уж не говорю о том, что сеть вообще не знает, сколько у вас нитей — много и по сокету на каждую, или же одна с кучей сокетов и использованием select.

Так что правильно тут говорить не "многонитевость", а "многосокетность".

И даже многосокетность даст выигрыш только, если на сервере лимитирован трафик, или же если разные сокеты качают с разных серверов.

Если это не так — то см. выше, пропускная способность сети не увеличится от того, что сокетов много.

В TCP есть автоматический механизм (state machine) прощупывания этой пропускной способности и подбора на ходу правильного темпа передачи. Называется — slow start/congestion avoidance, и работает — хорошо.

Создание многих сокетов с целью обмануть это и добиться еще большей скорости — практически не работает (даже снижает скорость качания на 3-5%). Механизм очень хороший.

Так что, если все файлы качаются с одной и той же машины — то смело качайте последовательно.
Занимайтесь LoveCraftом, а не WarCraftом!
Re[5]: требуется реализовать многопоточный upload файлов из
От:  
Дата: 17.08.07 16:57
Оценка:
Hello, Maxim!
You wrote on Fri, 17 Aug 2007 16:15:19 GMT:

YК>> Это не так.

YК>> How to configure<br />
<span class='lineQuote level2'>YК&gt;&gt; Internet Explorer to have more than two download sessions</span>

YК>> WinInet limits<br />
<span class='lineQuote level2'>YК&gt;&gt; connections per server</span>


MSS> Надо же. Переделали.


MSS> Несколько лет назад я смотрел netstatом на юниксном сервере,

MSS> сколько коннектов создало скачивание всего одной среднего уровня
MSS> странички в IE. Штук пять точно было.

Несколько лет понятие конечно растяжимое, но не думаю что там что-то переделывали. Начиная как минимум с IE 5 так было. А показывались тебе скорее всего уже неактивные соединения.
Posted via RSDN NNTP Server 2.1 beta
Re[2]: спасибо!!!!
От: sh_san Украина  
Дата: 22.08.07 21:25
Оценка:
_>огромное спасибо за подсказки, буду думать!
_>похоже, грузить файлы придется постедовательно, а уже обрабатывать параллельно, т.к. решение надо сделать быстро и чтоб работало

Кстати, можете попробовать ещё в гугле набрать "multiple file upload". То что Вам нужно.
Мне на флеше решение понравилось
Re[2]: требуется реализовать многопоточный upload файлов из
От: Andir Россия
Дата: 23.08.07 09:27
Оценка: :)
Здравствуйте, Gangsta, Вы писали:

G>Не знаю как там с безопасностью java-апплетов, но мне кажется, что апплет по умолчанию имеет право коннектится только к серверу, с которого он загружен. Это тоже необходимо учесть. В общем, посмотри эти ограничения, перед тем как что-то делать.


Апплеты и сервлеты — это совершенно разные вещи. Сервлеты исполняются на web-сервере.

С Уважением, Andir!
using( RSDN@Home 1.2.0 alpha rev. 717 ) { /* Работаем */ }
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.