Здравствуйте, Gangsta, Вы писали:
G>Не знаю как там с безопасностью java-апплетов, но мне кажется, что апплет по умолчанию имеет право коннектится только к серверу, с которого он загружен. Это тоже необходимо учесть. В общем, посмотри эти ограничения, перед тем как что-то делать.
Апплеты и сервлеты — это совершенно разные вещи. Сервлеты исполняются на web-сервере.
пишу на форум первый раз, так что извините если что не так (чукча более читатель)
требуется реализовать многопоточный upload файлов, вызываемый из сервлета
веб-страничке дается список файлов и жмется кнопка "upload". запускается сервлет, который создает штук 5 тредов, которые берут по очереди файлы из списка, загружают на сервер, обрабатывают и складывают в базу
какие есть готовые решения, паттерны или почитать на эту тему?
Здравствуйте, tanja_me, Вы писали:
_>пишу на форум первый раз, так что извините если что не так (чукча более читатель) _>требуется реализовать многопоточный upload файлов, вызываемый из сервлета
Татьяна,
учти, что по официальной документации к протоколу HTTP ты не можешь создавать более двух соединений с сервером одновременно. Поэтому тебе или нужно ограничиться двумя потоками, или сделать пяток (для надежности) виртуальных серверов, которые (тем не менее) будут указывать на один экземпляр.
Например, твой сервер называется tanja.ru, тогда сервера должны быть типа
srv01.tanja.ru
srv02.tanja.ru
...
srv05.tanja.ru
Не знаю как там с безопасностью java-апплетов, но мне кажется, что апплет по умолчанию имеет право коннектится только к серверу, с которого он загружен. Это тоже необходимо учесть. В общем, посмотри эти ограничения, перед тем как что-то делать.
Re: требуется реализовать многопоточный upload файлов из сер
_>требуется реализовать многопоточный 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[2]: требуется реализовать многопоточный upload файлов из
Здравствуйте, Gangsta, Вы писали:
G>Татьяна, G>учти, что по официальной документации к протоколу HTTP ты не можешь создавать более двух соединений с сервером одновременно. Поэтому тебе или нужно ограничиться двумя потоками, или сделать пяток (для надежности) виртуальных серверов, которые (тем не менее) будут указывать на один экземпляр.
Можно цитату из документации?
WBR, Igor Evgrafov
Re[2]: требуется реализовать многопоточный upload файлов из
Hello, Maxim!
You wrote on Fri, 17 Aug 2007 00:56:32 GMT:
G>> учти, что по официальной документации к протоколу HTTP ты не G>> можешь создавать более двух соединений с сервером одновременно.
MSS> IE/WinInet на это кладет
Несколько лет назад я смотрел netstatом на юниксном сервере, сколько коннектов создало скачивание всего одной среднего уровня странички в IE. Штук пять точно было.
_>похоже, грузить файлы придется постедовательно, а уже обрабатывать параллельно, т.к. решение надо сделать быстро и чтоб работало
Все файлы грузятся с одного сервера? или с нескольких?
Если с одного — то многонитевость не даст выигрыша. Понимаете ли, интернетовский маршрут между первой и второй машиной не станет шире от того, что вы породили кучу нитей.
Я уж не говорю о том, что сеть вообще не знает, сколько у вас нитей — много и по сокету на каждую, или же одна с кучей сокетов и использованием select.
Так что правильно тут говорить не "многонитевость", а "многосокетность".
И даже многосокетность даст выигрыш только, если на сервере лимитирован трафик, или же если разные сокеты качают с разных серверов.
Если это не так — то см. выше, пропускная способность сети не увеличится от того, что сокетов много.
В TCP есть автоматический механизм (state machine) прощупывания этой пропускной способности и подбора на ходу правильного темпа передачи. Называется — slow start/congestion avoidance, и работает — хорошо.
Создание многих сокетов с целью обмануть это и добиться еще большей скорости — практически не работает (даже снижает скорость качания на 3-5%). Механизм очень хороший.
Так что, если все файлы качаются с одной и той же машины — то смело качайте последовательно.
Занимайтесь LoveCraftом, а не WarCraftом!
Re[5]: требуется реализовать многопоточный upload файлов из
Несколько лет понятие конечно растяжимое, но не думаю что там что-то переделывали. Начиная как минимум с IE 5 так было. А показывались тебе скорее всего уже неактивные соединения.
_>огромное спасибо за подсказки, буду думать! _>похоже, грузить файлы придется постедовательно, а уже обрабатывать параллельно, т.к. решение надо сделать быстро и чтоб работало
Кстати, можете попробовать ещё в гугле набрать "multiple file upload". То что Вам нужно.
Мне на флеше решение понравилось