PHPエンジンがすでにサーバーでスクリプトを実行している最中である場合、同じスクリプトに対する他の同時ブラウザー要求はどうなりますか?
サーバーは、その構成に応じて、通常、何百ものリクエストを同時に処理できます-Apacheを使用している場合、MaxClients
設定オプションは、
MaxClients
ディレクティブは、処理される同時要求の数の制限を設定します。MaxClients
制限を超える接続試行は、通常、ListenBacklogディレクティブに基づいた数までキューに入れられます。
別のリクエストの終了時に子プロセスが解放されると、接続が処理されます。
2つのクライアントが同じページを要求するという事実は問題ではありません。
そう :
リクエストはキューに入れられますか?
いいえ。場合を除き :
MaxClients
以上あります。直前のApacheのマニュアルからの引用を参照してください。それらは無視されますか?
いいえ:これは、1人のユーザーのみが同時にWebサイトを使用できることを意味します。これはあまりいいことではないでしょうか?
その場合、誰かが答えたかどうかを確認するために同時にF5を押すと、この答えを投稿できませんでした!
(まあ、SOはPHPにはありませんが、原則は同じです))
他の可能性はありますか?
はい^^
OPとコメントを編集した後に編集します:
各リクエストには独自のスクリプトインスタンスがありますか?
"script instance"のようなものはありません:簡単に言えば、スクリプトへのリクエストが行われた場所で何が起こっているかです:
実際には、同じPHP script(または異なるPHPすべて同じPHP file)を含むスクリプト;それは間違いなく問題ではない、または私が今まで取り組んだウェブサイトのどれも動作しません!
2つのクライアントが同時にサーバーを呼び出す場合、サーバーはほとんどの場合、両方のクライアントにほぼ同時に応答できます。ここのクライアントは、ブラウザレベルに定義します。
同じマシン上で、2つのブラウザーを使用して同じWebサイト/ページを同時に読み込む場合、両方を同時に読み込む必要があるということです。
ただし、PHPについて説明しているので、セッションに関する特別なメモを取る必要があります。ページがセッションを使用する場合、サーバーは一度に1ページのみを提供します。これは、スクリプトが終了するまでセッションファイルがロックされるためです。
この例を見てください。 2つのファイルは、同じセッション、つまり同じブラウザ、同じユーザーから読み込まれます。
scripta.php requested scripta.php served
------+---+---------------------------------+------------------------>
scripta.php started
scriptb.php requested scriptb.php started
---------------+-------------------------------+-----------------+--->
scriptb.php served.
Scriptb.phpは、scripta.phpが提供された後にのみ開始されることに注意してください。これは、scripta.phpが開始されると、セッションファイルが他のスクリプトにロックされ、scripta.phpがセッションファイルに書き込むことができるためです。 scripta.phpが完了すると、セッションファイルのロックが解除され、他のスクリプトが使用できるようになります。したがって、scriptb.phpはセッションファイルが解放されるまで待機し、その後セッションファイルをロックして使用します。
このプロセスは繰り返し行われ、複数のスクリプトが同じセッションファイルに書き込んで遅延が発生するのを防ぎます。したがって、 session_write_close
()セッションを使用しなくなったとき、特に多くのiframeまたはAJAXを使用しているWebサイトで。
自分でこれに出くわしました。基本的に、シングルユーザーのロックを防ぐために、session_write_close()
を呼び出す必要があります。 session_write_close()
を呼び出したら、セッション変数を変更しようとしないでください。一度呼び出したら、それ以降はセッションを読み取り専用として扱います。
非常に非標準のセットアップを実行している場合を除き、Webサーバー(Apache、IIS、nginxなど)には、サーバーに着信するリクエストごとにPHPを個別に実行する複数のプロセスがあります。リクエストは同時に処理されます。