最初に説明する必要があるのは、デーモンとは何かということです。
デーモンプロセスは、常にバックグラウンドで実行されるプロセスです。たとえば、httpd や mysqld など、私たちが開始するプロセスはすべて常駐メモリ内で実行されるプログラムです。
ニーズの分析:
要件: 常駐キュー messageQueue があります (Redis メモリ内にあると想定されます)。このキューには、要素をキューに追加するリクエストが時々含まれる場合があります。同時に、キューに要素がある場合、その要素がキューの順序に従ってポップアウトされて処理されることを要求します (この処理は単に echo 'test' であると仮定します);
解決策:
ここで、すでに 2 つの関数があると仮定します
function oPopMessageQueue(){ …} //キューの最後の要素を取得します。
function vDealElement($element) { …} 要素を処理します。
上記の要件を満たすためにデーモンを作成する必要があります。
プログラム:
わかりました。このプログラムは、while ループを使用して実行するのが簡単です。
コードをコピーします コードは次のとおりです:
while(true)
{
if( $element = oPopMessageQueue())
{
vDealElement ($element);
}
}
考慮してください 1:
このプログラムを実行し続けると、すでに上記のニーズを満たすことができます。
ただし、次の点を考慮してください。 1. PHP プロセスで実行している場合、さまざまな状況 (長時間実行など) によりプロセスがハングする可能性があるため、プログラムは自動的に再接続できません。
方法: cronを使用します
このプログラムを 10 分ごとに実行するための時間指定スクリプトでプロセスを開始します。
次に、このプログラムの実行時間を 10 分に設定し、10 分後に自動的にキャンセルするため、コードは次のようになります
コードをコピー
コードは次のとおりです: while(true)
{
if($element = oPopMessageQueue( ))
vCheckTimeLimit();
vDealElement($elemnt);
vCheckTimeLimit() empty($timeStart))
{
using using が必要になります。いつでもスクリプトを一時停止する機能:
そこで、ファイルを使用して一時停止機能を追加することを検討しました
コードをコピーします
コードは次のとおりです:
while(true)
{
if($ element = oPopMessageQueue())
{
vCheckTimeLimit();
vCheckEnd(); e/end"))
exit ;
}
}
3 を検討してください。
マルチスレッド プログラムに変更して、より効率的に実行するには?
これには、1 つのプロセスの cron 制限を 10 分から 1 分ごとに変更するだけです
これにより、プログラムを実行するスレッドが 10 個になることが保証されますただし、基本的な要件があります。 : oPopMessageQueue() はアトミック操作です
http://www.bkjia.com/PHPjc/327061.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/327061.html
技術記事
最初に説明する必要があるのは、デーモンとは何かということです。 デーモンは、常にバックグラウンドで実行されるプロセスです。たとえば、httpd や mysqld など、私たちが開始するプロセスはすべて常駐メモリ内で実行されるプログラムです。 ...