1. Go to this page and download the library: Download misterion/ko-process library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
$manager = new Ko\ProcessManager();
for ($i = 0; $i < 10; $i++) {
$manager->fork(function(Ko\Process $p) {
echo 'Hello from ' . $p->getPid();
sleep(1);
});
}
$manager->wait();
$manager = new Ko\ProcessManager();
$manager->demonize();
$manager->setProcessTitle('I_am_a_master!');
$manager->onShutdown(function() use ($manager) {
echo 'Catch sigterm.Quiting...' . PHP_EOL;
exit();
});
echo 'Execute `kill ' . getmypid() . '` from console to stop script' . PHP_EOL;
while(true) {
$manager->dispatch();
sleep(1);
}
$manager = new Ko\ProcessManager();
for ($i = 0; $i < 10; $i++) {
$manager->spawn(function(Ko\Process $p) {
echo 'Hello from ' . $p->getPid();
sleep(1);
exit(1); //exit with non 0 exit code
});
}
$manager->wait(); //we have auto respawn for 10 forks
use PhpAmqpLib\Connection\AMQPConnection;
use PhpAmqpLib\Message\AMQPMessage;
$manager = new Ko\ProcessManager();
$manager->setProcessTitle('Master:working...');
$manager->spawn(function(Ko\Process $p) {
$connection = new AMQPConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel();
$channel->queue_declare('hello', false, true, false, false);
$callback = function($msg) use (&$p) {
$p->setProcessTitle('Worker:processJob ' . $msg->body);
//will execute our job in separate process
$m = new Ko\ProcessManager();
$m->fork(function(Ko\Process $jobProcess) use ($msg) {
$jobProcess->setProcessTitle('Job:processing ' . $msg->body);
echo " [x] Received ", $msg->body, "\n";
sleep(2);
echo " [x] Done", "\n";
})->onSuccess(function() use ($msg){
//Ack on success
$msg->delivery_info['channel']
->basic_ack($msg->delivery_info['delivery_tag']);
})->wait();
$p->setProcessTitle('Worker:waiting for job... ');
//IMPORTANT! You should call dispatch() them self to process pending signals.
$p->dispatch();
if ($p->isShouldShutdown()) {
exit();
}
};
$channel->basic_qos(null, 1, null);
$channel->basic_consume('hello', '', false, false, false, false, $callback);
while(count($channel->callbacks)) {
$channel->wait();
}
$channel->close();
$connection->close();
});
$manager->wait();
$sm = new SharedMemory(5000); //allocate 5000 bytes
$sm['key1'] = 'value';
echo 'Total keys is' . count($sm) . PHP_EOL;
echo 'The key with name `key1` exists: ' . isset($sm['key1'] . PHP_EOL;
echo 'The value of key1 is ' . $sm['key1'] . PHP_EOL;
unset($sm['key1']);
echo 'The key with name `key1` after unset exists: ' . isset($sm['key1'] . PHP_EOL;
$s = new Semaphore();
$s->acquire();
//do some job
$s->release();
//or
$s->tryExecute(function() {
//do some job
});
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.