大規模なWebプロジェクトで作業する場合、現在必要のないタスクがありますが、それらは重要であり、完了する必要があります。 このようなアクションは、コード内で直接実行できますが、繰り返し実行できません。 しかし、私の意見では、メインタスクコードの外部でこれをすぐに行う方がよいと考えられます。これにより、コードがアンロードされ、実行の均一性が実現されます。
ここでの一般的なアプローチは、実行キューと遅延タスクを作成することです。 主な例:サードパーティのサイトからのデータの送信/検証。 リセラーパネルからメインサイトへのデータ転送。 自動的に完了できないタスクの手動処理への転送。
タスクを分散する手段として、PHPクラスTasksに注目します。
クラスコード
そして今、説明のために。
タスクは、一時ディレクトリにファイルとして保存されます。 クラウンで実行されているスクリプトは、タスクのリストを受け取り、各タスクに対してexecuteメソッドを実行します。 正常に実行されると、タスクファイルは削除されます。 クラスは、MySQLデータベースで動作するように作り直すことができます。 実行をブロックしないDELAYED INSERTを実行できるため、これは理にかなっていますが、信頼性の向上によりファイルシステムが使用されるようになりました。
タスクは、ロジックを変更せずにアルゴリズムの通常の要素として作成されます。
たとえば、次のとおりです。
$q_upd=update_order_data($params);
になっています
$q_upd=tasks::create("update_order_data", 'api', 0, $params);
タスクには優先度レベルがあります。これにより、cronスクリプトが実行されるたびに「重要」の順序でタスクを実行することができます。 優先度パラメーターが大きいほど、タスクはさらに遅延します。
Cronスクリプトオプション: code
コードのTasksクラスの隣にtask_handlersクラスがあります-task_handlersにハンドラーを作成できます。
このクラスの関数の名前は、タスクの作成時に設定できるハンドラーの名前です。 「mysql」および「mail」ハンドラーは例として示されています-それらのコードは小さいため、説明に便利です。
コードの作成者はeugeniozで、MITライセンスの下でコードを使用できます。
このクラスの単純さと軽さにもかかわらず、アルゴリズムのロジックを変更せずに非常に効率的に負荷を分散できます。
もう一度アプリケーションの例:
- 別のサイトとやり取りする必要があるサービスのいずれかのプロファイル設定ページで、データを確認します。 このサイトは、「すぐではない」と答えることもできます。 簡潔な出力は、ブロックの1つで「チェック」されます。1行の遅延のために数秒でページ全体を生成するよりもはるかに優れています。
- 現時点では、携帯電話からwapサイトにアクセスし、IPがオペレーターIPゲートのリストにないすべての訪問者に対して、IPをチェックするタスクが作成されます。 空き時間には、IPに関するwhois情報が取得され、モバイルオペレータに属していることを示す可能性のある単語がないかチェックされます。 そのような単語がある場合、IPは「検証用」リストに追加され、「手動」検証の後、このIPはオペレーターIPゲートのリストに追加できます。
- 利用できない可能性のあるリモートAPIを操作しますが、アクションが遅延する可能性があり 、実行する必要があります。 たとえば、多くの場合、再販業者のパネルは注文を繰り返さないため、多くの苦情や利益の損失につながります。
eugenioz :建設的な批判、質問、改善のための提案に注意深く耳を傾けます。