|
|
|
Помогите с выбором технологии
|
|||
|---|---|---|---|
|
#18+
Мне надо сделать некое веб-приложение, которое позволит посетителю сформировать список необходимых ему файлов и после оплаты скачать их в виде архива. Изначально планировалось сделать рнр-страничку на которой посетитель может выбрать из списков те, или иные файлы, после чего инициировать на сервере процесс, который заархивирует все эти файлы во временной папке, принадлежащей этому посетителю, и после подтверждения оплаты отправит посетителю имейл со ссылкой на сценарий, отдающий этот архив на скачивание. Мне почему-то не очень нравится идея запускать процесс на сервере с помощью веб-приложения. Во-первых, мне кажется, что Java EE дает спецификацию на взаимодействие между клиентской веб-частью приложения и средствами находящимися на сервере. В идеале, по-моему, веб-клиент вообще не должен знать о существовании средств, которыми сервер вернет запрошенные файлы. Возможно должно генерироваться какое-то событие, например, завершение формирования списка. Слушать это событие должно приложение, или класс которое и будет работать с файлами. Была мысль сделать некий семафор, наличие которого было бы указанием на начало обработки файлов. Появление этого семафора проверять по cron например каждые 10-20 секунд. Но это значит увеличение нагрузки на сервер независимо от того, запрашивал ли клиент файлы, или нет. Я правильно рассуждаю, не так ли? В тоже время одновременно может прийти несколько запросов на разные файлы от разных посетителей и здесь, как мне кажется, уже всплывает вопрос многопоточности и параллельности. Прежде мне не приходилось делать ни чего подобного, поэтому теория у меня хромает. Если я где-то не правильно понимаю то, как подобные задачи должны решаться, пожалуйста поправте меня. В свое время я почитывал книги по Java EE и мне кажется, что это как раз тот случай, когда стоит к ней обратиться, да и такое решение, по-моему, будет более производительным чем на РНР. Подскажите пожалуйста, где можно почитать о подобных решениях, посмотреть примеры? Сразу благодарю всех откликнувшихся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2014, 03:06 |
|
||
|
Помогите с выбором технологии
|
|||
|---|---|---|---|
|
#18+
bob_j, Велосипед вместо Корзина покупателя? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2014, 07:45 |
|
||
|
Помогите с выбором технологии
|
|||
|---|---|---|---|
|
#18+
bob_jМне почему-то не очень нравится идея запускать процесс на сервере с помощью веб-приложения. На линухе же довольно легковесные процессы. Для винды, конечно же, повод задуматься. А что PHP с файлами не умеет работать? bob_jВо-первых, мне кажется, что Java EE дает спецификацию на взаимодействие между клиентской веб-частью приложения и средствами находящимися на сервере. JEE очень слабо чего даёт в плане взаимодействия с клиентской частью. Всё больше про сервер. bob_jВ идеале, по-моему, веб-клиент вообще не должен знать о существовании средств, которыми сервер вернет запрошенные файлы. А на PHP разве знает? bob_jВозможно должно генерироваться какое-то событие, например, завершение формирования списка. Слушать это событие должно приложение, или класс которое и будет работать с файлами. Направление верно, чего нельзя сказать о выводах ниже. bob_jБыла мысль сделать некий семафор, наличие которого было бы указанием на начало обработки файлов. Появление этого семафора проверять по cron например каждые 10-20 секунд. Но это значит увеличение нагрузки на сервер независимо от того, запрашивал ли клиент файлы, или нет. Я правильно рассуждаю, не так ли? Да. Вот только почему вы отбросили "события". Стоит знать что обработка "событий", обычно, организована в виде очередей. А не таймеров с семафорами. Pure JEE аналог это JMS. С другой стороны вполне можно ограничиться асинхронными сервлетами в Servlet 3.0. Хотя API у них немного стремное. Что, впрочем, вполне обычно для JEE. bob_j В тоже время одновременно может прийти несколько запросов на разные файлы от разных посетителей и здесь, как мне кажется, уже всплывает вопрос многопоточности и параллельности. Ну, вообще-то любое web приложение уже подразумевает многопоточность и праллельность. bob_jПодскажите пожалуйста, где можно почитать о подобных решениях, посмотреть примеры? Я бы Фаулера читал. Enterprise Patterns - сборник типовых решений. Потому как именно недостаток знания различных типовых решений порождает каких-то монстров в виде cron-семафоров. Можно сделать так id файлов храним в HttpSession клиента после оформления покупки запускаем из сервлета асинхронный "процесс" упаковки файлов http://docs.oracle.com/javaee/7/tutorial/doc/servlets012.htm по завершении отдаём файл клиенту Я недавно делал парсер файлов. jQuery UI Progressbar + jquery-stream + Servlet 3.0 вполне нормально позволили запилить COMET и мониторить процесс обработки файла на клиенте. Единственной неожиданностью стала небольшая проблема с GZIP. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2014, 09:25 |
|
||
|
Помогите с выбором технологии
|
|||
|---|---|---|---|
|
#18+
То что вы просите очено похоже на готовый jenkins. Можно формировать задачи со свободной структурой. Контролировать количество одновременных задач. запускать внешние процессы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2014, 09:55 |
|
||
|
Помогите с выбором технологии
|
|||
|---|---|---|---|
|
#18+
BlazkowiczНа линухе же довольно легковесные процессы. Для винды, конечно же, повод задуматься. А что PHP с файлами не умеет работать? РНР с файлами конечно умеет работать. Дело в том, что я описал приближенную картину того, как все должно происходить. Веб часть - это только вершина айсберга. Реально на сервере не просто надо будет собрать файлы в архив, но и еще много всяких операций проделать, прежде чем вернуть архив клиенту. Например, надо будет обратиться к 1С, которая на виндовом сервере крутится. Писать серверное приложение на РНР для связи веб-приложения и 1С? Мне не очень такая перспектива по душе. Мне показалось, что в данной ситуации связка Servelt+EJB самое то. Я вроде где-то читал, что Spring предлагает какую-то облегченную замену EJB. BlazkowiczНу, вообще-то любое web приложение уже подразумевает многопоточность и праллельность. Я имел в виду, что приложение, подготавливающее заказанный архив и делающее всякие другие операции на сервере, должно быть многопоточным. BlazkowiczЯ бы Фаулера читал. Enterprise Patterns - сборник типовых решений. Потому как именно недостаток знания различных типовых решений порождает каких-то монстров в виде cron-семафоров. Можно сделать так id файлов храним в HttpSession клиента после оформления покупки запускаем из сервлета асинхронный "процесс" упаковки файлов http://docs.oracle.com/javaee/7/tutorial/doc/servlets012.htm по завершении отдаём файл клиенту Я недавно делал парсер файлов. jQuery UI Progressbar + jquery-stream + Servlet 3.0 вполне нормально позволили запилить COMET и мониторить процесс обработки файла на клиенте. Единственной неожиданностью стала небольшая проблема с GZIP. За рекомендации спасибо. Я реально плаваю во многих выше описанных моментах, просто давно хотел разобраться в Java EE и этот случай показался мне весьма подходящим. Если все же отказаться от Java EE, то как правильно сделать связь между веб-приложением, реализованном на РНР, и серверной частью, которая может быть реализована на чем угодно? У меня большой пробел в знаниях именно об этом моменте. Как организовывается взаимодействие? До этого писал простые сайты на Друпале и с помощью разных фреймворков, но там все решалось внутри самой CMS, или на уровне модели которая работала с БД, но не привлекала ни каких других сторонних ресурсов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2014, 10:56 |
|
||
|
Помогите с выбором технологии
|
|||
|---|---|---|---|
|
#18+
bob_j, Многопоточность и 1С странное сочетание. Тут только заказ файлов и ждать закрыв Ослик. Т.е. личный кабинет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2014, 11:15 |
|
||
|
Помогите с выбором технологии
|
|||
|---|---|---|---|
|
#18+
bob_jПисать серверное приложение на РНР для связи веб-приложения и 1С? Любой interop сейчас через XML SOAP Web Service реализуется. При этом я более чем уверен что в PHP вас ожидает меньше сюрпризов при использовании web сервисов. А в Java вы легко столкнетесь с тем что дефолтная реализация JAX-WS окажется чем-то не совместима с 1С и нужно будет изучать и сторонние реализации вроде CXF. С настороженностью теперь смотрю на перспективы использовать JAXB и JAX-WS. Столько крови попили уже. bob_jМне показалось, что в данной ситуации связка Servelt+EJB самое то. Я вроде где-то читал, что Spring предлагает какую-то облегченную замену EJB. EJB сам по себе сложно устроен. Надо его понимать чтобы применять правильно и к месту. EJB API раньше был нереально перегружен. Но сейчас его сильно упрастили за счет IoC и аннотаций. Spring более прямолинейный, чем EJB. Но за годы развития он на столько оброс всякой фигней, что тоже надо понимать как всё устроено, прежде чем использовать. Ну, и действительно ли нужны EJB сказать сложно. Нужно знать и понимать требования к проекту. Отказоустойчивость? Масштабирование? bob_jЯ имел в виду, что приложение, подготавливающее заказанный архив и делающее всякие другие операции на сервере, должно быть многопоточным. ОК. Это всегда принимается по-умолчанию для любого серверного приложения. Поэтому утверждать очевидное не стоит. bob_jпросто давно хотел разобраться в Java EE и этот случай показался мне весьма подходящим. Ну, вот с этого надо было начинать. Если есть желание изучить JEE, то берем и применяем полный стэк JEE: JMS, Session Beans, JPA, CDI. bob_jЕсли все же отказаться от Java EE, то как правильно сделать связь между веб-приложением, реализованном на РНР, и серверной частью, которая может быть реализована на чем угодно? У меня большой пробел в знаниях именно об этом моменте. Как организовывается взаимодействие? До этого писал простые сайты на Друпале и с помощью разных фреймворков, но там все решалось внутри самой CMS, или на уровне модели которая работала с БД, но не привлекала ни каких других сторонних ресурсов. Концептуально разницы никакой нет на чем это писать. Пришел клиент его состояние живет в сессии - реализация есть везде Захотел клиент забрать файлы - создали событие, положили в очередь - реализация есть везде Обработчик событий в очереди параллельными потоками разгребает события, пакует файлы, дергает 1С. В общем, запускат бизнес-процесс. - релизация есть везде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2014, 11:16 |
|
||
|
Помогите с выбором технологии
|
|||
|---|---|---|---|
|
#18+
BlazkowiczЗахотел клиент забрать файлы - создали событие, положили в очередь - реализация есть везде Я что-то туплю в последнее время, сказалась бессонная ночь :( , не соображу как поисковый запрос гуглу сформулировать. Очередь обработки событий, так? Вы это имели в виду? Подскажите пожалуйста, где можно глянуть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2014, 11:26 |
|
||
|
Помогите с выбором технологии
|
|||
|---|---|---|---|
|
#18+
bob_jЯ что-то туплю в последнее время, сказалась бессонная ночь :( , не соображу как поисковый запрос гуглу сформулировать. Очередь обработки событий, так? Вы это имели в виду? Подскажите пожалуйста, где можно глянуть? Java, PHP или теория? Google -> Message Queue, Event Queue, Asynchronous processing ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2014, 11:34 |
|
||
|
Помогите с выбором технологии
|
|||
|---|---|---|---|
|
#18+
зачем городить такие сложности? всё это решается через простейший сайт на jsp, если хочется использовать java. если требуется связь с 1с - то тут отдельная проблема (не зависит от того на чем реализовано) если нужна полная асинхронность то можно использовать websocket. в общем задача - простейший интернет-магазин ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2014, 11:40 |
|
||
|
Помогите с выбором технологии
|
|||
|---|---|---|---|
|
#18+
BlazkowiczJava, PHP или теория?Наверное все, и первое и второе и третье. Чтобы определиться на чем все таки делать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2014, 11:41 |
|
||
|
Помогите с выбором технологии
|
|||
|---|---|---|---|
|
#18+
Он не знает что он хочет даже на ПХП ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2014, 11:48 |
|
||
|
Помогите с выбором технологии
|
|||
|---|---|---|---|
|
#18+
вадязачем городить такие сложности? всё это решается через простейший сайт на jsp, если хочется использовать java. если требуется связь с 1с - то тут отдельная проблема (не зависит от того на чем реализовано) если нужна полная асинхронность то можно использовать websocket. в общем задача - простейший интернет-магазин По большому счету действительно магазин. Просто мне не приходилось прежде связывать сайты с приложениями не имеющими прямого отношения к вебу (1С в данном случае) и меня как раз этот механизм взаимодействия и интересует, а Java EE, как мне показалось, предлагает именно это решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2014, 11:50 |
|
||
|
Помогите с выбором технологии
|
|||
|---|---|---|---|
|
#18+
Прочитав все выше написанное я хочу немного переформулировать и уточнить вопрос. Повторюсь. Посетитель через сайт выбирает список файлов, оплачивает его и скачивает. Сайт может быть хоть на РНР, хоть на Python, хоть на Java. Это внешняя сторона, то, что видно посетителю. Подготовку файлов должен выполнять не скрипт, который крутится под управлением веб-сервера, а некое независимое приложение, назовем его упаковщик , которое ждет информацию о том, что на сайте произошло событие - пользователь заказал файлы. Получив уведомление о сообытии упаковщик обращается через какой-то интерфейс к 1С, или к API банка и получает подтверждение оплаты (по большому счету 1С тоже может сгенерировать событие, которое упаковщик должен слушать). После этого упаковщик подготавливает архив запрошенных файлов, кладет их в определенное место и генерирует событие готовности к отправке. Веб приложение должно обработать это событие, отправляя покупателю заказанные файлы. Собственно, мне нужно организовать обработку событий. Вот этот момент мне сейчас и не понятен. Как фактически независимые приложения заставить слушать друг друга и обрабатывать возникающие события. Я думал, что Java EE как раз и есть средством для решения данной проблемы, но получается, что Java тут как бы и не при чем. Резюме Мне нужно разобраться с созданием и обработкой событий. Подскажите, где можно найти документация, примеры, спецификация и т.д. по данной теме? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2014, 12:17 |
|
||
|
Помогите с выбором технологии
|
|||
|---|---|---|---|
|
#18+
С логикой вам нужно разобраться. Т.к. файлы - неисчерпаемый ресурс, то упаковщик должен включаться в работу тогда, когда заказ уже оплачен, а не тогда, когда он (только) сделан. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2014, 12:19 |
|
||
|
Помогите с выбором технологии
|
|||
|---|---|---|---|
|
#18+
bob_jПо большому счету действительно магазин. Просто мне не приходилось прежде связывать сайты с приложениями не имеющими прямого отношения к вебу (1С в данном случае) и меня как раз этот механизм взаимодействия и интересует, а Java EE, как мне показалось, предлагает именно это решение. У 1С есть свои решения для создания "витрин" 1С. Поищите на их сайте. Там даже есть свой интернет-магазин. Возможно даже ничего и писать не надо будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2014, 12:19 |
|
||
|
Помогите с выбором технологии
|
|||
|---|---|---|---|
|
#18+
bob_j, С 1 и начни. Либо через файлы либо СОМ либо веб сервис. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2014, 12:20 |
|
||
|
Помогите с выбором технологии
|
|||
|---|---|---|---|
|
#18+
bob_jМне нужно разобраться с созданием и обработкой событий. Подскажите, где можно найти документация, примеры, спецификация и т.д. по данной теме? https://www.google.com/search?q=PHP async tasks https://www.google.com/search?q=PHP async jobs https://www.google.com/search?q=PHP message queue https://www.google.com/search?q=Java async tasks https://www.google.com/search?q=Java async jobs https://www.google.com/search?q=Java message queue ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2014, 12:25 |
|
||
|
Помогите с выбором технологии
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovС логикой вам нужно разобраться. Т.к. файлы - неисчерпаемый ресурс, то упаковщик должен включаться в работу тогда, когда заказ уже оплачен, а не тогда, когда он (только) сделан.Да, Вы правы, но это на данном этапе не важно. Важно то, как организовать обработку событий. Я просто не представляю что именно мне надо прочитать. По совету Blazkowicz пойду читать Message Queue, Event Queue, Asynchronous processing. 1С приведен как пример всем известной программы. Я вообще склоняюсь к API банка. Т.е. этот момент тоже сейчас не важен. Это просто черный ящик подтверждающий оплату. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2014, 12:30 |
|
||
|
Помогите с выбором технологии
|
|||
|---|---|---|---|
|
#18+
Blazkowiczbob_jМне нужно разобраться с созданием и обработкой событий. Подскажите, где можно найти документация, примеры, спецификация и т.д. по данной теме? https://www.google.com/search?q=PHP async tasks https://www.google.com/search?q=PHP async jobs https://www.google.com/search?q=PHP message queue https://www.google.com/search?q=Java async tasks https://www.google.com/search?q=Java async jobs https://www.google.com/search?q=Java message queue Спасибо большое. Буду разбираться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2014, 12:31 |
|
||
|
Помогите с выбором технологии
|
|||
|---|---|---|---|
|
#18+
Ну тогда это: если "клиент просит архив" и "заказ не оплачен" то "попросить подождать" иначе или "отдать содержимое архива" или "отдать страничку со ссылкой на архив" "По-моему так" (ц) Винни-Пух ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2014, 12:34 |
|
||
|
Помогите с выбором технологии
|
|||
|---|---|---|---|
|
#18+
bob_jСпасибо большое. Буду разбираться. Хочу сраз рассказать один момент. Возможно его сразу так не ведзе разъясняют. Концепции Async Job от Message Queue - в плане реализации внутри слабо чем отличаются. Но есть важное различие в том как они используются. Async Job - подразумевает что нужно выполнить фоновую задачу. И вам всё равно как именно это произойдёт. Т.е. вы указываете "системе" запустить некий код асинхронно. А "система" за вас создаёт поток, помещает код в очередь и вам лишь предоставляет API для того чтобы узнать результат асинхронного выполнения. Message Queue отличатеся тем, что у вас на руках ещё и контроль над тем очередью. Вы заботитесь о том чтобы туда поместить событие и потом его вычитать. У вас больше контроля над состоянием очереди. И, зачастую, у вас есть способы её, например, персистить. То есть принцип работы один и тот же. Просто в материалах будет разное описание и разные API. Async - более простой для изучения и использованя. Message Queue - больше даст понимания что как устроено и что с этим можно делать и какие вообще бывают сценарии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2014, 12:57 |
|
||
|
Помогите с выбором технологии
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2014, 13:20 |
|
||
|
Помогите с выбором технологии
|
|||
|---|---|---|---|
|
#18+
тут надо сначало разобраться с задачей - если требуется полная автоматизация (абсолютно полная) то единственная проблема - это связь с 1с. а имено фиксация факта прихода денег. тут надо знать как это делается в конкретном случае- если сидит бух и вводдит ручками - то проще в 1с вставить кнопку и по ней осуществлять запуск процессов проверки оплаты и прочее. а потоки и прочее в данном случае это для самообразования. потому как выйгрыша от их применении нет, даже пройгрыш. всё упрётся в быстродействии файловой системы. и чем больше потоков с ней будутработать - тем медленнееситема будет в целом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2014, 15:29 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38776052&tid=2126454]: |
0ms |
get settings: |
10ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
185ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
70ms |
get tp. blocked users: |
1ms |
| others: | 241ms |
| total: | 546ms |

| 0 / 0 |
