すでに述べたことに同意/拡張すると、FastCGI が問題を解決するとは思えません。
アパッチ
Apache への各要求は、要求が完了するまで 1 つのワーカー スレッドを使用します。これは、COMET 要求の場合は長時間になる可能性があります。
Ajaxian に関するこの記事では、Apache で COMET を使用することについて言及していますが、それは難しいことです。この問題は PHP に固有のものではなく、Apache で使用するすべてのバックエンド CGI モジュールに適用されます。
提案された解決策は、リクエストがワーカー スレッドにディスパッチされる方法を変更する「イベント」MPM モジュールを使用することでした。
この MPM は、HTTP の「キープ アライブの問題」を修正しようとします。クライアントが最初のリクエストを完了した後、クライアントは接続を開いたままにし、同じソケットを使用してさらにリクエストを送信できます。これにより、TCP 接続を作成する際のオーバーヘッドを大幅に節約できます。ただし、Apache は伝統的に子プロセス/スレッド全体をクライアントからのデータを待機させたままにしており、これが独自の欠点をもたらします。この問題を解決するために、この MPM は専用スレッドを使用して、リッスン ソケットとキープ アライブ状態のすべてのソケットの両方を処理します。
残念ながら、これも機能しません。リクエストが完了した後にのみ「スヌーズ」し、クライアントからの新しいリクエストを待つためです。
PHP
さて、問題の反対側を考えると、comet リクエストごとに 1 つのスレッドを保持することで問題を解決したとしても、リクエストごとに 1 つの PHP スレッドが必要になります。これが FastCGI が役に立たない理由です。
コメットリクエストがトリガーされたイベントが観測されたときにコメットリクエストを再開できる継続のようなものが必要です。私の知る限り、これは PHP で可能なことではありません。Java でしか見たことがありません。Apache Tomcat サーバーを参照してください。
編集:
ロード バランサー ( HAProxy ) を使用して、Apache サーバーとコメット対応サーバー (Jetty、Java の Tomcat など) の両方を同じサーバーのポート 80 で実行できるようにする方法に関する記事がここにあります。