2009-08-06 29 views
15

レスポンスをスローせずにPHPで非同期的にHTTPリクエストを行う方法はありますか?つまり、AJAXに似た何か - PHPスクリプトがリクエストを開始します。それは自分自身であり、後でレスポンスを受け取ると、コールバック関数/メソッドまたは別のスクリプトがレスポンスを処理します。PHPでの非同期HTTPリクエスト

1つのアプローチでは、新しいPHPプロセスを各リクエストごとに別のスクリプトで作成しています.2番目のスクリプトはリクエストを行い、応答を待ってからデータを解析し、元のスクリプト新しいプロセスを生み出すためにただし、この場合のパフォーマンスについては疑問があります。毎回新しいプロセスを作成しなければならないため、パフォーマンス上のペナルティが発生します。

答えて

9

はい、サイトのトラフィックによっては、スクリプトを実行するための別のPHPプロセスを生成することが致命的になる可能性があります。 shell_exec()を使用して、すでに知っているファイル名に出力を保存するバックグラウンドプロセスを開始する方が効率的ですが、それでもリソースを大量に消費する可能性があります。

また、リクエストキューをデータベースに格納することもできます。単一の独立したバックグラウンドプロセスがジョブをプルし、実行し、出力を保存し、おそらくWebプロセスがチェックできるDBのフラグを設定します。

DBキュー手法を使用する場合は、curl_multi *関数のクラスを使用して、キューに入れられたすべての要求を一度に送信します。これにより、バックグラウンドプロセスの各反復の実行時間が最も長い要求時間に制限されます。

3

V5はスレッド化されていなくても、インプロセスマルチタスキングを利用するアプリケーションを作成できます。

「developerWorksの 」から、「PHP V5でマルチタスキング・アプリケーションを開発する」を参照してください。あなたはそれをここに見つけることができますhttp://www.ibm.com/developerworks/web/library/os-php-multitask/

関連する問題