Я хочу асинхронно вызывать команду из контроллера в Symfony2.Асинхронное вызов команды в Symfony2
До сих пор я нашел следующее решение:
$cmd = $this->get('kernel')->getRootDir().'/console '.(new MLCJobWorkerCommand)->getName().' '.$job->getId().' 2>&1 > /dev/null';
$process = new Process($cmd);
$process->start();
Есть ли лучший способ сделать это?
Edit:
мне нужен процесс, чтобы работать в фоновом режиме и контроллер, чтобы вернуться сразу после начала первого. Я пробовал:
$cmd = $this->get('kernel')->getRootDir().'/console '
.(new MLCJobWorkerCommand)->getName()
.' '.$job->getId().' 2>&1 > /dev/null & echo \$!';
$process = new Process($cmd);
$process->mustRun();
$params["processid"] = $process->getOutput();
, но контроллер не возвращает ответ до тех пор, пока процесс не завершится.
Проблема заключается в том, что новый процесс остановится, как только родительский процесс останавливается, а также, что является ограничением в PHP. Лучшим решением может быть использование системы массового обслуживания, такой как RabbitMQ. – Gerry
Это великолепно выглядит, я попробую. Раньше я начинал фоновый процесс на PHP в соответствии с моим редактированием, но контроллер блокирует здесь. Это связано с вашим комментарием? – dmb