Здравствуйте, столкнулся с небольшой проблемой при запуске функции, которая должна выполняться в фоне после определенного действия пользователя. Так как по завершению функции от неё не нужны никакие данные и тд., хотелось бы чтобы пользователь во время выполнения функции мог без проблем пользоваться сайтом. Фоновый запуск функции реализовал через exec('/usr/bin/php test.php &'); но при этом браузер по прежнему ждет завершения функции и не дает пользователю нормально использовать сайт.
Прошу вас подсказать как сделать выполнение полностью в фоне для пользователя.
Заранее всем спасибо.
1. Nyam - 02 Февраля, 2018 - 16:13:51 - перейти к сообщению
2. Мелкий - 02 Февраля, 2018 - 18:38:46 - перейти к сообщению
С веба кладёте задачу в очередь pgq, gearman, rabbitmq или чего ещё больше нравится.
Кроном или написанным демоном вычитываете задачу, выполняете, затем хватаете следующую и выполняете
Такой подход нормально переживает пики активности вместо DoS всего сервиса.
Кроном или написанным демоном вычитываете задачу, выполняете, затем хватаете следующую и выполняете
Такой подход нормально переживает пики активности вместо DoS всего сервиса.
3. Nyam - 02 Февраля, 2018 - 20:05:39 - перейти к сообщению
Мелкий пишет:
С веба кладёте задачу в очередь pgq, gearman, rabbitmq или чего ещё больше нравится.
Кроном или написанным демоном вычитываете задачу, выполняете, затем хватаете следующую и выполняете
Такой подход нормально переживает пики активности вместо DoS всего сервиса.
Кроном или написанным демоном вычитываете задачу, выполняете, затем хватаете следующую и выполняете
Такой подход нормально переживает пики активности вместо DoS всего сервиса.
А возможно сделать без крона ?
4. Sail - 03 Февраля, 2018 - 14:40:56 - перейти к сообщению
Nyam, например, можно инициировать выполнение той самой функции через ajax-запрос от клиента.
Или отправить клиенту (браузеру) header("location...") и спокойно продолжать дальше выполнение скрипта (той самой функции).
Или отправить клиенту (браузеру) header("location...") и спокойно продолжать дальше выполнение скрипта (той самой функции).
5. LIME - 03 Февраля, 2018 - 18:58:30 - перейти к сообщению
Sail пишет:
Nyam, например, можно инициировать выполнение той самой функции через ajax-запрос от клиента.
Мелкий пишет:
это замечание к тс относитсяТакой подход нормально переживает пики активности вместо DoS всего сервиса.
всеже асинхронная обработка имеет свои плюсы
но есть и минусы
как говорится нет очереди нет проблем
6. Nyam - 04 Февраля, 2018 - 15:05:16 - перейти к сообщению
Sail пишет:
Nyam, например, можно инициировать выполнение той самой функции через ajax-запрос от клиента.
Или отправить клиенту (браузеру) header("location...") и спокойно продолжать дальше выполнение скрипта (той самой функции).
Или отправить клиенту (браузеру) header("location...") и спокойно продолжать дальше выполнение скрипта (той самой функции).
Как я понимаю header("location...") будет выполняться только уже после exec и в итоге ничего не изменится?
(Добавление)
LIME пишет:
всеже асинхронная обработка имеет свои плюсы
но есть и минусы
как говорится нет очереди нет проблем
Sail пишет:
Nyam, например, можно инициировать выполнение той самой функции через ajax-запрос от клиента.
Мелкий пишет:
это замечание к тс относитсяТакой подход нормально переживает пики активности вместо DoS всего сервиса.
всеже асинхронная обработка имеет свои плюсы
но есть и минусы
как говорится нет очереди нет проблем
Нагрузка на сервер не будет, так как если уже данный скрипт запущен, другие пользователи не могут его запускать, пока не выполнится предыдущий.
7. Sail - 04 Февраля, 2018 - 15:29:33 - перейти к сообщению
Nyam пишет:
Как я понимаю header("location...") будет выполняться только уже после exec и в итоге ничего не изменится?
Наоборот.
8. Nyam - 05 Февраля, 2018 - 22:05:55 - перейти к сообщению
Sail пишет:
Наоборот.
Nyam пишет:
Как я понимаю header("location...") будет выполняться только уже после exec и в итоге ничего не изменится?
Наоборот.
Спасибо большое!
9. Nyam - 10 Февраля, 2018 - 14:34:31 - перейти к сообщению
Sail пишет:
Наоборот.
Nyam пишет:
Как я понимаю header("location...") будет выполняться только уже после exec и в итоге ничего не изменится?
Наоборот.
Проверил, оказалось что не работает, по прежнему браузер блочится.
10. Nyam - 11 Февраля, 2018 - 20:44:26 - перейти к сообщению
Больше нету идей как можно решить проблему ? (
11. LIME - 12 Февраля, 2018 - 03:55:19 - перейти к сообщению
Nyam пишет:
Проверил, оказалось что не работает, по прежнему браузер блочится.
Проверил, оказалось что не работает, по прежнему браузер блочится.
вот это новость
Nyam пишет:
асинхронная обработкаБольше нету идей как можно решить проблему ? (
мелкого слушай
вот что тебе непонятно?
хочешь и рыбку сьесть и рыбку сьесть?
12. Nyam - 13 Февраля, 2018 - 05:05:27 - перейти к сообщению
LIME пишет:
вот это новость
мелкого слушай
вот что тебе непонятно?
хочешь и рыбку сьесть и рыбку сьесть?
Nyam пишет:
Проверил, оказалось что не работает, по прежнему браузер блочится.
Проверил, оказалось что не работает, по прежнему браузер блочится.
вот это новость
Nyam пишет:
асинхронная обработкаБольше нету идей как можно решить проблему ? (
мелкого слушай
вот что тебе непонятно?
хочешь и рыбку сьесть и рыбку сьесть?
Нет, хочу рыбку есть и компотом запивать.
При обращении к скрипту через exec а перед этим прописания хедера, по прежнему отвисает страница в браузере только после завершения выполнения скрипта, прописанного в exec.
13. Sail - 13 Февраля, 2018 - 21:07:44 - перейти к сообщению
Nyam пишет:
Больше нету идей как можно решить проблему ? (
Есть, конечно. Всё тот-же header. Только чуть другой: рецепт.
14. arbuzmaster - 19 Февраля, 2018 - 15:35:28 - перейти к сообщению
А что мешает вывести результат в далекое никуда?
1. exec('/usr/bin/php test.php >/dev/null');
2.exec('wget -O /dev/null -q http://localhost/test.php >/dev/null &');
И пусть он там выполняется до потери пульса!
1. exec('/usr/bin/php test.php >/dev/null');
2.exec('wget -O /dev/null -q http://localhost/test.php >/dev/null &');
И пусть он там выполняется до потери пульса!