web-dev-qa-db-ja.com

多くのほぼ同時に着信するXMLHttpRequestを処理するサーバー側スクリプト

私は自分の分析プラットフォームを構築しています。これをこのように動作させたい...

  • 各WebページのJSスクリプトは、ユーザーのクリック動作に関するデータを収集し、そのデータをサーバー上のPHP(または他の便利な言語))スクリプトに送信します。このサーバー側スクリプトはデータを受信します最初のAJAX=リクエストから、それを変数に格納します。

  • 次に、別のAJAX要求が待機しているため、サーバー側スクリプトはそのAJAX要求からデータを受信し、それを変数に格納します。

  • 次に、多くのAJAX=要求が待機していない場合、サーバー側のスクリプトは変数に格納されているデータを取得し、MySQL(または同様の)データベースに挿入します。

  • 最後に、サーバー側のスクリプトはこれらの変数をすべてメモリから削除し(それらは不要になったため)、さらにAJAXリクエストが送られるのを待ちます。

ここで説明したことを達成する最も簡単な方法は何ですか?

2
Steve_P

ほとんどすべての主要なプログラミング言語には、任意のタスクの非同期実行の実装に役立つ既存のqueueコンポーネントがあります。これは、質問。車輪を再発明しないほうがよい。たとえば、PHPの場合、この 古いstackoverflow Q&A はいくつかの選択肢を提供します。 「php非同期タスク」をグーグルすると、さらに多くのオプションが見つかります。または、非同期コールバックの使用を大幅に促進するnode.jsなどを使用します。

2
Doc Brown

これは時期尚早の最適化のように聞こえます。これは実際にはネットワークスタックに組み込まれており、サーバーが処理する準備ができるまで接続がキューに入れられるため、ホイールを再発明する必要はありません。

Mysqlに1行を挿入するだけで非常に高速です。 mysqlに1行挿入する、または永続キューにプッシュするのにかかる時間に関して違いはありません。

実際のパフォーマンスの問題がある場合は、まだスレッドモデルを使用しているphp以外のものを使用することを検討してください。 nodejsやasp.net(async/awaitを含む)などの新しいプラットフォームは、待機中にスレッドを占有しない非同期モデルを利用しますが、代わりにコールバックを使用して、データベースへの書き込み中にスレッドを解放して他の要求を処理します。

3