1. ホーム
  2. php

[解決済み] PHPキューシステムの構築方法

2022-02-15 07:28:26

質問

PHPのキューシステムを構築する必要があり、これを見つけました。 冴えた記事 http://squirrelshaterobots.com/programming/php/building-a-queue-server-in-php-part-1-understanding-the-project を使い、PHPのキューシステムを作りましたが、セットアップも使い方もとても簡単でした。

以下は、シェル(puTTyなど)から実行するqueue.phpのコードです。

<?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();

}

?>

一番大変だったのは、私のサーバーでpcntl関数を動作させることでした。

私の質問は、quot;サーバーが再起動するとき/したときに、自動的にジョブを開始するようにするにはどうすればよいですか?


コメントで指摘されたように、リンク切れを編集し、後世に残すために優れたウェブアーカイブを紹介しました。

解決方法は?

<ブロッククオート

私の質問は、quot;サーバーが再起動するとき/したときに、ジョブを自動的に開始させるにはどうすればよいですか?

サーバーの起動時に開始するもののリストに追加することで。 残念ながら、その方法はOSやOSのバージョンによって大きく異なります。 おそらく、もう少しクロスプラットフォームなものを使いたいのでしょう。 私は、次のようなものを使って、大きな幸運を手に入れました。 スーパーバイザー これは、お使いのOSのパッケージリポにあるはずです。

とはいえ、あなたが行っているのは 狂気 . あなたがやろうとしていることは、以前にも素晴らしい人たちによって、もっとうまくやられています。 をチェックしてみてください。 ギアマン ワークキューシステムとそれに付随する PECL拡張 . スーパーバイザーは、ギアマンのワーカーを生かすのにもかなり便利なんだ。