2013-01-04 16 views
8

Ho dovuto creare un sistema di code PHP e ho trovato questo brillante articolo http://squirrelshaterobots.com/programming/php/building-a-queue-server-in-php-part-1-understanding-the-project/ e l'ho usato per creare un sistema di code PHP, è molto facile da configurare e utilizzare.Come creare un sistema di code PHP

Di seguito è riportato il codice per queue.php, eseguito da shell (puTTy o 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(); 

} 

?> 

La parte più difficile è stata far funzionare le funzioni pcntl sul mio server.

La mia domanda è "Come faccio ad avviare il lavoro automaticamente quando/se il server deve riavviarsi?"

+1

Cosa, esattamente, è la tua domanda? –

+1

@ MartinBean Come posso avviare automaticamente il lavoro quando/se il server deve riavviarsi? –

+1

è possibile modificare lo script di avvio del server per farlo, oppure è possibile aggiungere uno script che riporti stato di script/server e secondo script per riavviare un lavoro e quindi utilizzarli entrambi dall'host locale o remoto per monitorare il lavoro server/riavvio (con cronjob) – llamerr

risposta

9

La mia domanda è "Come faccio ad avviare il lavoro automaticamente quando/se il server deve riavviarsi?"

Aggiungendolo all'elenco di cose avviate all'avvio del server. Sfortunatamente le istruzioni per farlo variano selvaggiamente dal sistema operativo e dalla versione del sistema operativo. Probabilmente vuoi usare qualcosa di leggermente più multipiattaforma. Ho avuto molta fortuna con lo supervisor, che probabilmente puoi trovare nei repository dei pacchetti sul tuo SO preferito.

Detto questo, stai percorrendo il percorso della pazzia . La cosa che stai facendo è stata fatta prima, meglio, da persone fantastiche. Controlla il sistema di code di lavoro Gearman e l'accompagnamento PECL extension. Succede che il supervisore è abbastanza utile per mantenere vivi anche i tuoi lavoratori Gearman.

Problemi correlati