Wie man eine PHP-Queue-System

Musste ich Baue eine PHP-Queue-System, und fand diese Brillanten Artikel,
http://squirrelshaterobots.com/programming/php/building-a-queue-server-in-php-part-1-understanding-the-project und ich benutzte es, um zu erstellen Sie eine PHP-queue-system, es ist sehr einfach einzurichten und zu verwenden.

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.

Schreibe einen Kommentar