Использование Javascript для выполнения процесса и отправки обновлений / обратных вызовов на веб-сервер
Я работаю над процессом, позволяющим людям загружать файлы PDF и управлять документом (порядок страниц) через веб-интерфейс.
Страницы файла PDF должны быть обрезаны до определенного размера для печати, и в настоящее время мы запускаем их с помощью действия Photoshop, которое позаботится об этом.
Что я хочу сделать, это загрузить файлы PDF на выделенный сервер для выполнения желаемого процесса (действие Photoshop, конвертировать, отправлять изображения обратно на веб-сервер).
Каковы некоторые хорошие способы выполнения функций, но отправка обновлений на веб-сервер, чтобы позволить отслеживание процессов / индикаторы выполнения, чтобы держать пользователя в курсе того, сколько времени занимают его файлы для обработки.
Кроме того, каковы некоторые хорошие методы для организации очередей / отслеживания заданий / процессов в целом (с акцентом на веб-технологии)?
2 ответа
Дерек, я уверен, что у тебя есть причины использовать Photoshop, но если серьезно, то Imagemagick сделал тебя недостаточно? Однажды я работал с утилитой факса, которая конвертировала файлы Fax.g3 в формат TIFF, затем с помощью Imagemagick увеличила контраст и яркость на 15% и преобразовала его обратно в PDF. IM работал как отдельная программа Linux, вызываемая system()
позвоните, и я знаю, что есть новое расширение Imagemagick PECL.
Создайте очередь и отправьте туда задания. Запустите cronjob или демон, который получает задания из очереди и обрабатывает их. Убедитесь, что вы используете какую-то блокировку, чтобы вы могли безопасно остановить / запустить демон / задание.
Если вы ожидаете, что работа закончится быстро, вы можете использовать технику, известную как "комета". По сути, вы устанавливаете соединение из javascript (используя XmlHttpRequest) с вашим серверным скриптом. В этом сценарии вы проверяете, завершена ли работа. Если нет, вы спите на секунду или две - затем проверьте еще раз. Вы продолжаете делать это, пока работа не закончится. Тогда вы даете ответ обратно. В результате запрос может занять некоторое время, но он вернется немедленно. Затем вы можете предпринять соответствующие действия в JavaScript (перезагрузить страницу или что-то еще).