0

このコンセプトとみんなの考えをチェックしたかった。Gearmanを使用して、バックグラウンドでいくつかのタスク(主にデータの収集と処理)を実行したいと思います。

PHPフレームワーク(私の場合はCakePHP2)を中心にGearmanをセットアップしたいと思います。Gearmanを理解している限り、ワーカーは単一のphpスクリプト(つまりworker.php)を実行するPHPデーモンにすぎません。

PHPフレームワークですでに構築したロジック/コードをそのシングルワーカースクリプトに組み込む方法を理解しようとしています。そうでなければ、モデルのようなたくさんのものを再構築しなければならないかもしれません。

したがって、私の解決策は、worker.phpを軽量に保ち、代わりにワーカースクリプトにCURLを介してRESTAPI呼び出しを開始させることです。これは良い選択肢のように聞こえますか?

4

2 に答える 2

1

cURL呼び出しを行うことは、私には少しオーバーヘッドに聞こえます。私は最初に次のことを調べます。

  • フレームワークの一部をワーカーにロードします(呼び出しを行ってからフレームワークを呼び出すよりも安価です)
  • 「コールバック」のための特別な労働者を作ります。たとえば、実際のワーカーが実際の作業を行い、完了時に結果を「コールバック」キューに送信します。そのコールバックワーカーは、Gearmanからジョブを受け入れ、そこからそれらを取得します(REST APIエンドポイントがそこから取得するのと同じように)。

いずれにせよ、マシン間で作業を分割しない限り、追加のHTTP呼び出しを行うことはお勧めできません。PHPを直接操作できるのに、なぜApacheを使用するのですか?

于 2012-10-03T18:03:46.850 に答える
0

これを回答の追加として追加していますが、返信が短すぎました。

私はGearmanワーカーをCakePHPコンソールとして実行し、それを監視対象の構成にラップすることができました

// Add the example configs below
[program:my-gearman-test]
command= /path/to/cakephp/app/Console/cake gearman test
process_name= %(process_num)g-gearman-test
numprocs=1 
directory=/path/to/cakephp/app
autostart=true
autorestart=true
user=www-data
stdout_logfile=/path/to/logs/worker_stdout.log
stdout_logfile_maxbytes=1MB
stderr_logfile=/path/to/logs/worker_stderr.log
stderr_logfile_maxbytes=1MB

次に、supervisordを実行すると、Cakeコンソールコマンドの初期化が開始されます。これで、CakePHPフレームワークのワーカー部分を使用して、スタンドアロンのworker.phpスクリプトを実行する代わりにフレームワークを使用することで得られるすべての利点を得ることができます。

于 2012-10-05T01:09:36.800 に答える