2012-07-06 37 views
17

私のクライアントから送信されたデータ(投稿経由)をキューに入れ、サーバ上のPHPスクリプトがキューが空であるかどうかを最初に確認します。キューが空でない場合、スクリプトはキュー内のすべてのデータを1つずつ処理します。これを行うにはどうすればよいですか?PHP PHPでキュー処理を実装するには

+0

データベースにテーブルを作成してデータを送信し、その後crontabジョブを実行してxを取得しますか? – BugFinder

+0

はい。私はこのアプローチが好きです。しかし、テーブルにタスクを挿入した後、タスクが完了したらテーブルを更新して更新するにはどうしたらいいですか? – ASHUTOSH

+0

これは、処理するタスクを実行し、dbにアクセスして更新するためのcronジョブのポイントでした – BugFinder

答えて

3

thisをご覧ください。

これは、永続性のためにmemcachedを使用します。

7

あなたはExample by Rasmus Lerdorfを参照してくださいZero MQ

のようなものを使用することができます。

Gearmanを使用して負荷を分散することも考えられます。ここで

1

cronjobの問題は、最大で1分に設定できるため、ジョブの実行に1分の遅延があります。許容されていれば、ポーリングスクリプトでキューを使用してください。

0

リレーショナルDB(Ex:MySQL)は柔軟性が高く、Web開発者がよく理解しているため、多くの種類のジョブキューに使用されています。多くのPHPアプリケーションでは、オブジェクトキャッシュが構成されていないときにこのソリューションをフォールバックとして使用します。キューを実装するには非常に高価な方法なので、最後の手段です。

MySQLをキューとして使用する必要がある場合、Perconaエンジニアの1人は、潜在的な苦労ポイントを管理するためにblog entryと書いています。

最もスケーラブルな実装が必要な場合は、ZeroMQを強くおすすめします。しかし、これはデフォルトではなく、特に一般的なPHP拡張ではありません。したがって、Webサーバースタックを制御しないプロジェクトの場合は、APCオブジェクト、MemcacheまたはMemcachedを使用してから、MySQLキャッシュテーブルにフォールバックします。

4

これは、ライブラリenqueueで簡単に行うことができます。まず、AMQP、STOMP、Redis、Amazon SQS、Filesystemなどのさまざまなtransportsから選択できます。

第2に、これは使いやすいです。インストールから始めましょう:

enqueue/simple-clientライブラリとone of the transportsをインストールする必要があります。ファイルシステムを選択すると仮定すると、enqueue/fsライブラリをインストールしてください。要約すると:

<?php 
// producer.php 

use Enqueue\SimpleClient\SimpleClient; 

include __DIR__.'/vendor/autoload.php'; 

$client = new SimpleClient('file://'); // the queue will store messages in tmp folder 

$client->sendEvent('a_topic', 'aMessageData'); 

消費スクリプト:

<?php 
// consumer.php 

use Enqueue\SimpleClient\SimpleClient; 
use Enqueue\Psr\PsrProcessor; 
use Enqueue\Psr\PsrMessage; 

include __DIR__.'/vendor/autoload.php'; 

$client = new SimpleClient('file://'); 

$client->bind('a_topic', 'a_processor_name', function(PsrMessage $psrMessage) { 
    // processing logic here 

    return PsrProcessor::ACK; 
}); 

// this call is optional but it worth to mention it. 
// it configures a broker, for example it can create queues and excanges on RabbitMQ side. 
$client->setupBroker(); 

$client->consume(); 

を実行しますできるだけ多くconsumer.phpプロセスとして使用することにより

composer require enqueue/simple-client enqueue/fs 

を今度は、あなたがあなたのPOSTのスクリプトからメッセージを送信する方法を見てみましょうsupervisordまたは他のプロセスマネージャーをローカルコンピューター上で実行すると、余分なライブラリやパッケージがなくても実行できます。

これは基本的な例です。エンキューには他にもたくさんの機能があります。興味があれば、enqueue documentationを調べてください。