2012-03-16 8 views
8

うまくいけば、私はこれを十分に説明することができます。私はPHP library to handle ajax requests through PHPをオブジェクト指向の方法で作成しています。私は現在、長いポーリングソリューションを実装するための良い方法を考えていますが、何かについて興味があります。ApacheでのPHPによるロングポーリング

Apacheは、複数の接続を非常にうまく開いた状態に保つことはできません。要求ごとのスレッドモデルは、Apacheを長いポーリングでは非常に非効率的にします。 nginxやlighttpdのようなサーバを使うと、これらのスレッドをもっとうまく処理できるので、ライブラリでは、単一の関数呼び出しから利用可能な特定のサーバに最適化されたさまざまな関数を実装する予定です。 Apacheの場合、PHPアプリケーションの市場シェアが非常に大きくなっていますが、私はより良い解決策が必要です。

受信リクエストを保留/一時停止し、他のリクエストの処理を続けるまで処理を続ける方法はありますか?

私はそれが意味をなさないか、私が正しいトラックにいてもわかりません。 SOがApacheサーバー上でPHPで長いポーリングを行うことをお勧めする可能性のある解決策は何ですか?

+0

なぜサーバー上で処理を一時停止しますか?あなたのユーザーがたくさん待たされるのではないでしょうか? – Joseph

+0

Apacheでは、要求ごとのスレッドモデルを使用するため、アプリケーションの最初のページ要求でスレッドが使用され、ajax要求(DOMがロードされると呼び出されます)では別のスレッドが使用されます。問題は、大量のトラフィックが何千ものスレッドを生成し、最終的にはサーバーを無効にすることを試みることです。 –

+0

私はajax/PHPの長いポーリングページを読み込んだ後も同じような問題がありました。いずれにしても、タイムアウト機能をjavascriptに移したので、javascriptは新しいPHP実行をそれぞれ要求しています10sだが、ページの読み込みは今やOKであるようだ。 –

答えて

1

これは継続のようです。あなたは間違いなく、どのような優雅な方法でもこれをPHPで行うことはできません。これを行うには、現在の状態を保存し、状態をロードするときに中断したところから再開できるようにコードを書き込むことをお勧めします。

+0

私は同じ結論に至り始めています。私はちょうど基本的な長いポーリングの解決策を実装するつもりだと思うし、ドキュメンテーション/コメント注釈では特定のサーバー環境では最適ではないことを注釈する。そうすれば、誰かがそれを使用しようとするなら、基本機能は既にそこにあります。 –

0

解決策はありません。通常の要求とポーリング要求を区別することはできません。助けてくれるApacheは避けてください(たとえば、80でnginxを実行し、ポーリングリクエスト以外のすべてのリクエストを81のApacheに転送するなど)。

私もあなたに問題はないと思います。 Nginxや他のサーバーは、Apacheよりはるかに効率的ではありません。ポーリングはPHPの要求ですが、mod_phpを使用したApacheはそれほど良い選択ではありません。 NginxはPHPを提供するのにApacheより少ないリソースしか使用しません。

+4

'NginxはPHPを提供するためにApacheより少ないリソースを使用しません.'それについては確かですか? http://serverfault.com/questions/157520/apache-vs-nginx –

+0

私は、反対のURLを読んでいない。 "mod_phpはphp-fpmよりもわずかに速い"、 "cgiはmod_phpよりもはるかに遅い"などです。もちろん、通常のPHPファイル/静的ファイルと比較して長いポーリングをどれだけ実行するかによって異なります。 Apacheは静的ファイル、Apacheで何個のモジュールを使用しているのか心配していません... – jcisio

関連する問題