Nolithiusでの長いポーリングに関する記事を読んでいました。PHPがセッション全体でスリープするセクションの下に、セッションsession_write_close
全体がデッドロックになるのを防ぐために関数を呼び出す必要があると書かれています。ここでのデッドロックとは正確にはどういう意味ですか?この関数がないと、クライアント側で開いた同じドメインの他のページは、このスクリプトの実行が終了して結果を返すまで、他のスクリプト(このスクリプトなど)からAJAXデータを受信できないということですか?なぜこれが起こるべきですか?そして、ここでどのようsession_write_close
に役立つことができますか?このリクエストからデータを受信した後、次にこのドメインからページをリクエストしたときに、クライアント側からすべてのパーソナライズを削除しませんか?
12270 次
1 に答える
18
これは私の理解です:
ファイルベースのセッションが使用される場合、各リクエストは、リクエストが終了するまでファイルを文字通りロックします。
つまり、次の要求(これもセッションデータを使用します)は、ロックが解放されるのを待つ必要があります。
これは、セッションデータの破損を回避するために使用されます。
を使用session_write_close()
すると、ファイルがクリーンアップされ(ただし、セッションデータが失われることはありません)、ファイルのロックが解除され、他の要求を続行できるようになります。
これは、おそらく多くのスリープ状態のスクリプトがある場合は特に良い習慣です。
于 2012-09-13T07:30:22.737 に答える