Using Event Loops
September 4, 2015 ยท View on GitHub
Doorman works well alongside event loop implementations like Icicle and ReactPHP.
Icicle
use AsyncPHP\Doorman\Manager\ProcessManager;
use AsyncPHP\Doorman\Task\ProcessCallbackTask;
$manager = new ProcessManager();
$task = new ProcessCallbackTask(function () {
for ($i = 0; $i < 5; $i++) {
print "child tick {$i}";
sleep(1);
}
});
$manager->addTask($task);
Icicle\Loop\periodic(0.1, function () use ($manager) {
if (!$manager->tick()) {
Icicle\Loop\stop();
}
});
Icicle\Loop\run();
ReactPHP
use AsyncPHP\Doorman\Manager\ProcessManager;
use AsyncPHP\Doorman\Task\ProcessCallbackTask;
$manager = new ProcessManager();
$task = new ProcessCallbackTask(function () {
for ($i = 0; $i < 5; $i++) {
print "child tick {$i}";
sleep(1);
}
});
$manager->addTask($task);
$loop = React\EventLoop\Factory::create();
$loop->addPeriodicTimer(0.1, function () use ($manager, $loop) {
if (!$manager->tick()) {
$loop->stop();
}
});
$loop->run();
Using Doorman with an infinite loop makes the whole thing a blocking process. If you use Doorman with one of these event loop implementations, you can perform other non-blocking operations while monitoring child processes. It's great!