Wie man eine PHP-Queue-System
Musste ich Baue eine PHP-Queue-System, und fand diese Brillanten Artikel,
und ich benutzte es, um zu erstellen Sie eine PHP-queue-system, es ist sehr einfach einzurichten und zu verwenden.http://squirrelshaterobots.com/programming/php/building-a-queue-server-in-php-part-1-understanding-the-project
Unten ist der code für queue.php, ausführen von shell (puTTy oder somesuch).
<?PHP
//. set this constant to false if we ever need to debug
//. the application in a terminal.
define('QUEUESERVER_FORK', true);
////////fork into a background process ////////
if(QUEUESERVER_FORK){
$pid = pcntl_fork();
if($pid === -1) die('error: unable to fork.');
else if($pid) exit(0);
posix_setsid();
sleep(1);
ob_start();
}
$queue = array();
////////setup our named pipe ////////
$pipefile = '/tmp/queueserver-input';
if(file_exists($pipefile))
if(!unlink($pipefile))
die('unable to remove stale file');
umask(0);
if(!posix_mkfifo($pipefile, 0666))
die('unable to create named pipe');
$pipe = fopen($pipefile,'r+');
if(!$pipe) die('unable to open the named pipe');
stream_set_blocking($pipe, false);
////////process the queue ////////
while(1){
while($input = trim(fgets($pipe))){
stream_set_blocking($pipe, false);
$queue[] = $input;
}
$job = current($queue);
$jobkey = key($queue);
if($job){
echo 'processing job ', $job, PHP_EOL;
process($job);
next($queue);
unset($job, $queue[$jobkey]);
}else{
echo 'no jobs to do - waiting...', PHP_EOL;
stream_set_blocking($pipe, true);
}
if(QUEUESERVER_FORK) ob_clean();
}
?>
Der schwierigste Teil war immer die pcntl-Funktionen, um auf meinem server.
Meine Frage ist "Wie bekomme ich den job automatisch gestartet, wenn/falls die server neu zu starten?"
Wie bereits in den Kommentaren, herausgegeben Defekten link und wies auf die ausgezeichnete web-archive für die Nachwelt.
- Was genau ist deine Frage?
- Wie bekomme ich den job automatisch gestartet, wenn/falls die server neu zu starten?
- Sie können ändern, server-Start-Skript zu tun, oder Sie können fügen Sie das Skript die berichten Stand der script/server und dem zweiten script für den restart einer job-und dann nutzen Sie, sowohl von lokalen oder remote-host zum überwachen von server - /restart-job (mit cronjob)
- Halten Sie im Verstand, um ein PHP-Skript mit pcntl_* () - Funktionen von PHP ausgeführt werden als CGI, es wird nicht zulassen, Kommandozeile, Verwendung, wenn " ausführen als Apache-Modul.
- Haben Sie zufällig den Brillanten Artikel von der Seite gespeichert? Die website scheint down zu sein und es war genau das, was ich persönlich brauchte 🙂
- Es WAR ein genialer Artikel - ich vorgemerkt es aus gutem Grund. Ich denke, dieser ist unsere beste option, die jetzt - Januar 2016 arbeitet.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Durch hinzufügen zu der Liste der Dinge, die dann gestartet, wenn der server gestartet wird. Leider ist die Anleitung dafür variieren Wild durch das Betriebssystem und die OS-version. Sie wollen wahrscheinlich verwenden Sie etwas mehr cross-Plattform. Ich hatte viel Glück mit supervisor, die Sie wahrscheinlich finden Sie in der Paket-repos auf Ihre OS der Wahl.
Sagte, du gehst die route von Wahnsinn. Die Sache, die Sie tun, hat getan, bevor, besser, von tollen Menschen. Überprüfen Sie heraus die Gearman arbeiten, queue-system und die accompnaying PECL Erweiterung. Es kommt vor, dass Betreuer ist ziemlich praktisch für die Aufbewahrung Ihrer Gearman-Arbeiter am Leben, als gut.