0

サービスとして永続的に実行される ReactPHP、Amp、Swoole などのフレームワークを使用して、サーバーで非同期タスクを処理するワーカー スクリプトを作成することを考えています (これらのフレームワークをまだ選択していないため、ソリューションこれらのいずれかが含まれていると役立ちます)。

私の Web エンドポイントは、通常どおり Apache + PHP-FPM によって引き続き管理されます。永続的に実行されているスクリプトにメッセージを送信して、非同期ジョブをできるだけ早く処理する準備ができていることを認識できるようにしたいと考えています。

Web エンドポイントからの擬似コード:

$pdo->exec('INSERT INTO Jobs VALUES (...)');
$jobId = $pdo->lastInsertId();

notify_new_job_to_worker($jobId); // how?

これらのフレームワークのいずれかで、PHP-FPM から永続的に実行されているスクリプトへの通信を通常どのように処理しますか? TCP / Unix ソケット サーバーをセットアップして、独自のメッセージング プロトコルを実装しますか? それとも、この問題に対処するための既製のソリューションがありますか?


注: ご参考までに、サードパーティのメッセージ キュー ソフトウェアを使用する予定はありません。データベース トランザクションの一部として非同期ジョブを保存する必要があるためです (保留中のコミットを含め、トランザクション全体が成功するかのいずれか)。またはトランザクション全体が破棄されます)。これは、雇用が失われないという私の保証です。最悪のシナリオで、実行中のサービスにメッセージを送信できない場合でも、後でデータベースから欠落したジョブが取得される可能性があります。

4

2 に答える 2

0

ワーカーがサービスとして「永続的に実行される」場合、対話するための API を提供する必要があります。プロジェクトで非同期サービスに AmPHP を使用し、サービスは HTTP/Websockets サーバー (Amp ライブラリを使用) を API トランスポートとして実装します。

于 2019-11-07T15:34:02.437 に答える