最近、PHP での Beanstalkd の使用について調査しています。かなりのことを学びましたが、サーバーのセットアップなどについていくつか質問があります。
これが私がそれをどのように機能させているかです:
- Beanstalkd と依存関係 (libevent など) を Ubuntu サーバーにインストールします。次に、Beanstalkd デーモンを開始します (これは基本的に常に実行する必要があります)。
- 私の Web サイトのどこか (ユーザーが何らかのアクションを実行したときなど) のタスクは、Beanstalkd キュー内のさまざまなチューブに追加されます。
基本的に PHP スクリプトを実行するデーモンとして実行される bash スクリプト (次のようなもの) があります。
#!/bin/sh php worker.php
4) ワーカー スクリプトには、キューに入れられたタスクを実行するための次のようなものがあります。
while(1) {
$job = $this->pheanstalk->watch('test')->ignore('default')->reserve();
$job_encoded = json_decode($job->getData(), false);
$done_jobs[] = $job_encoded;
$this->log('job:'.print_r($job_encoded, 1));
$this->pheanstalk->delete($job);
}
ここで、上記の設定に基づいた私の質問を次に示します (間違っている場合は訂正します)。
RSS フィードをデータベースなどにインポートするタスクがあるとします。一度に 10 人のユーザーがこれを行うと、全員が「テスト」チューブのキューに入れられます。ただし、一度に 1 つずつしか実行されません。10 個の異なるチューブをすべて同時に実行した方がよいでしょうか?
さらにチューブが必要な場合、10 個のワーカー スクリプトが必要になるということですか? 各チューブに 1 つずつ、watch() 関数の文字列リテラルを除いて、基本的に同じコードですべて同時に実行されます。
そのスクリプトをデーモンとして実行すると、どのように機能しますか? worker.php スクリプトを常に実行しますか? そのスクリプトは、理論的にはキューが空になるまでループするので、一度だけ開始するべきではありませんか? デーモンは worker.php を実行する頻度をどのように決定しますか? 設定だけですか?
ありがとう!