Ich stimme nicht zu, dass FastCGI das Problem lösen wird.
Apache
Jede Anforderung an Apache verwendet einen Arbeitsthread, bis die Anforderung abgeschlossen ist. Dies kann für COMET-Anforderungen eine lange Zeit in Anspruch nehmen.
In diesem Artikel über Ajaxian wird erwähnt, dass COMET unter Apache verwendet wird und dass dies schwierig ist. Das Problem ist nicht PHP-spezifisch und gilt für alle Back-End-CGI-Module, die Sie möglicherweise für Apache verwenden möchten.
Die vorgeschlagene Lösung bestand darin, das MPM-Modul "Ereignis" zu verwenden, mit dem die Art und Weise geändert wird, in der Anforderungen an Arbeitsthreads gesendet werden.
Dieses MPM versucht, das Problem "Keep Alive" in HTTP zu beheben. Nachdem ein Client die erste Anforderung abgeschlossen hat, kann der Client die Verbindung offen halten und weitere Anforderungen über denselben Socket senden. Dies kann erheblichen Aufwand beim Erstellen von TCP-Verbindungen sparen. Apache lässt jedoch traditionell einen gesamten untergeordneten Prozess / Thread auf Daten vom Client warten, was seine eigenen Nachteile mit sich bringt. Um dieses Problem zu lösen, verwendet dieses MPM einen dedizierten Thread, um sowohl die Listening-Sockets als auch alle Sockets zu verarbeiten, die sich in einem Keep Alive-Status befinden.
Leider funktioniert das auch nicht, da es erst nach Abschluss einer Anfrage "schlummert" und auf eine neue Anfrage vom Client wartet.
PHP
Wenn Sie nun die andere Seite des Problems betrachten, benötigen Sie auch dann einen PHP-Thread pro Anforderung, wenn Sie das Problem mit dem Halten eines Threads pro Kometenanforderung beheben. Aus diesem Grund hilft FastCGI nicht weiter.
Sie benötigen so etwas wie Fortsetzungen, mit denen die Kometenanforderungen wieder aufgenommen werden können, wenn das Ereignis beobachtet wird, durch das sie ausgelöst werden. AFAIK, das ist in PHP nicht möglich. Ich habe es nur in Java gesehen - siehe den Apache Tomcat-Server .
Bearbeiten:
Es gibt hier einen Artikel über die Verwendung eines Load Balancers ( HAProxy ), mit dem Sie sowohl einen Apache-Server als auch einen Kometen-fähigen Server (z. B. Jetty, Tomcat für Java) auf Port 80 desselben Servers ausführen können.