Возник вопрос следующего характера. Есть кнопка, при нажатии на которую посылается AJAX-запрос на контроллер. В нем выполняется задача, которая чаще всего длится довольно долго.
...
$process = new Process("...");
$process->start();
...
То, что start
запускает процесс асинхронно - это понятно. Но вот вопрос: как отслеживать состояние процесса и как узнать, что он завершился? Помимо этого, я хочу предотвратить случаи, когда пользователь посылает такой запрос, перезагружает страницу и посылает такой же запрос снова, а именно, чтобы кнопка была недоступна, если в фоне уже запущен процесс. Также необходимо как-то узнать, что процесс завершился и разблокировать кнопку. Собственно, как это реализовать?
Дополнительно: Также, было бы неплохо контролировать эти процессы извне, например, отслеживать их состояние на отдельной странице и при желании обрубать эти процессы. Возможно ли в symfony получить доступ к процессу, запущенного в одном контроллере из другого контроллера?
Боюсь что вы ошибочно можете использовать данный компонент, подразумевая что Symfony асинхронно запустит процесс не привязанный к ядру, однако это не так.
В документации написано вот что
If a Response is sent before a child process had a chance to complete, the server process will be killed (depending on your OS). It means that your task will be stopped right away. Running an asynchronous process is not the same as running a process that survives its parent process.
Т.е. асинхронно запущенный процесс будет жить ровно до момента когда вы пошлете Request. Обратите на это внимание, это важно.
Т.е. это не асинхронный процесс в классическом его понимании, например как в JS, однако позволяет решить наверное какие-то задачи, во время выполнения которых вы можете выполнять что то другое.
Ежели вы хотите запускать асинхронно процессы, выполняющие задачи, тут вам конечно же стоит воспользоваться очередями. RabbitMQ, например. Ну и заодно сможете контролировать выполняющие процессы через supervisor например, но это уже другая история.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
есть функция стандартная wp_insert_post() как можно вставить пост с помощью этой функции через bash
Есть объект с несколькими полями который отправляется как Json запрос на сервер