GM2mars
@GM2mars

Какое решение подойдет для фонового вычисления на php?

В коде (php) есть одна трудоемкая функция, которая блокирует процесс на 3-7 секунды. Хотелось бы вынести выполнение этой функции в фон. По принципу работы наподобие воркеров в javascript.

Краткое описание сценария для полной картины:
Есть сайт-сервис, на котором пользователь может "создать" изображение (получить определенную картинку). Функция получения той самой картинки и есть трудоемкая блокирующая функция. Пользователь жмет кнопку "получить картинку", у него все замерает на 3-7 секунд, а потом он переходит на страницу с полученной картинкой.
Хочется чтоб после нажатия на кнопку "получить картинку" пользователь сразу переходил на страницу с картинкой, где была бы заглушка, а js с определенным интервалом опрашивал сервер: "Готова картинка? Можно показывать?"
Главное в сценарии не увидеть полученную картинку, а иметь возможность без блокировок работать дальше.

Подскажите оптимальное решение с наименьшими трудозатратами в реализации?

p.s. Цикличное выполнение функции не нужно, функция выполняется при определенном запросе.
  • Вопрос задан
  • 2452 просмотра
Решения вопроса 1
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
С минимальными затратами, с учетом Вашего сценария:
Когда пользователь нажимает кнопку - отправляем ajax запрос к скрипту который занимается генерацией картинки и делаем переход на новую страницу не дожидаясь ответа. Далее все как вы расписали.

Upd
Более абстрактное и устойчивое к нагрузкам решение: очередь на стороне сервера и постоянно запущенные воркеры получающие оттуда задачи. Для очередей можно на небольших нагрузках использовать mysql, можно Redis, а можно использовать решение специально предназначенное для организации очередей - RabbitMQ.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Alexufo
@Alexufo
противоречивый, сложный, весь компьютерный.
Простой аякс, ничем не отличающийся от какого нибудь другого ожидания с лоадером. (Загрузка файла и пр)
Ответ написан
Комментировать
svd71
@svd71
Немного не так должно пойти. JS на странице ввода данных стартует этот фоновый запрос, показывая счетчик выполнения. При получении итвета об выполнении переводит на страницу с готовым результатом. Пример можно просмотреть на любом файловом шаринге.

Сам фоновый процесс можно организовать следуюшим образом: php скрипт создает в определенной папке текстовый файл с именем сессии полъзователя. Внутри - путь до ишодной картинки. В кроне проверяется в этой папке наличие файлов, если файл найден, то берется и запускается обработка. по окончании обработки создается файл с именем сессии в другой папке с содержимым в виде пути к обработанному файлу. php-скрипт, проверяющий по ajax-запросу браузера готовност просто ищет в этой папке файл с именем, как сессия и если находит, то сообсшает, что выполнено.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы