HTTPリクエストを受信したときにPHPスクリプトの新しいインスタンスを開始する代わりに、1つのPHPスクリプトで複数のリクエストを処理する方法はありますか?
6 に答える
PHP は、「Share Nothing」の概念に基づいて構築されており、分散ネットワークを使用することでアプリケーションの負荷分散とスケーリングを向上させることができます。だから「いいえ」これはできません。開始コストが高いと思われる場合は、オブジェクト/データ/ビューを概念的に「キャッシュ」するようにアーキテクチャを調整してください。serialize() などを使用します。
ファイルをHTTPサーバーにしてプロセスとして実行する場合は、そうです。
Apacheとmod_phpを介して実行された場合、いいえ。
(なぜとにかくそれが欲しいのですか?)
そのためのhttpリクエストの実装を見たことがありません。私が達成できたのは、すべてのリクエストが返ってくるのを待つことだけです。これは、プロセスをフォークしてバックグラウンドに送信することにより、コマンドラインで実行できます。または、そのためにGearman(分散作業)を利用することもできます。
私の知る限り、それを行う方法はありません。私が考えることができる最も近いものは、(xcacheまたはAPC)のようなphpオペコードキャッシュを使用することです。これらは、スクリプトの実行を高速化するためにコードをキャッシュします。すべてのリクエストには、独自のスクリプトインスタンスがあると思います。
必要なのは、データをキャッシュすることです。
PHP スクリプトは、キャッシュ内にリクエストの有効なデータがあるかどうかを確認するだけです。そうでない場合は、データベースを読み取ってキャッシュを更新し、結果をユーザーに返します。
さまざまなキャッシュ ライブラリを調べて、キャッシュをどのようにスケーリングするかを慎重に検討することをお勧めします。開始する場所の 1 つは Zend_Cache で、おそらくバックエンドで memcached を使用します。
HTTPリクエストを処理するスクリプトは、ソケットを使用して小さなPHPデーモンからデータを取得できます。
PHPデーモンに役立つライブラリは次のとおりです。http://github.com/kvz/system_daemon
そしていくつかのドキュメント:
http://kevin.vanzonneveld.net/techblog/article/create_daemons_in_php/