2017-01-05 7 views
0

я здесь цикл reactPHP с двумя событиями таймера:reactPHP процесс блокировки пуска таймера

$loop = \React\EventLoop\Factory::create(); 

$process = new \React\ChildProcess\Process("php wait5seconds.php"); 

$process->on('exit', function($exitCode, $termSignal) { 
    echo "Process Finished".PHP_EOL; 
}); 

$loop->addTimer(2, function($timer) { 
    echo "TWO".PHP_EOL; 
}); 

$loop->addTimer(1, function($timer) use ($process) { 
    echo "ONE".PHP_EOL; 
    $process->start($timer->getLoop()); 
}); 

$loop->run(); 

Без ребенка-процесса таймеры работают нормально, и я получаю из положить:

ONE 
TWO 

Но когда я запускаю процесс в первом таймере, второй таймер блокируется до завершения процесса. Я получаю выход:

ONE 
Process Finished 
TWO 

Не предполагается асинхронный? (5), поэтому я ожидаю:

ONE 
TWO 
Process Finished 

Что мне не хватает?

ответ

0

Работы для меня.

Возможно, ваша проблема связана с тем, что php wait5seconds.php приводит к ошибке и, следовательно, не работает в течение 5 секунд. Если вы замените его на sleep 5, все будет работать так, как ожидалось.

+0

Вы на Linux? Я на окнах –

+0

Да, вы можете попробовать 'timeout 5' вместо этого в Windows. – kelunik