Daha önce söylenenleri kabul etmek / genişletmek, FastCGI'nin sorunu çözeceğini düşünmüyorum.
Apaçi
Apache'ye yapılan her istek, istek tamamlanıncaya kadar bir işçi evresi kullanır, bu COMET istekleri için uzun sürebilir.
Ajaxian hakkındaki bu makale, COMET'in Apache üzerinde kullanılmasından ve bunun zor olduğundan bahsetmektedir. Sorun PHP'ye özgü değildir ve Apache'de kullanmak isteyebileceğiniz herhangi bir arka uç CGI modülü için geçerlidir.
Önerilen çözüm, isteklerin çalışan iş parçacıklarına gönderilme şeklini değiştiren 'olay' MPM modülünü kullanmaktı .
Bu MPM, HTTP'deki 'canlı tutma sorununu' gidermeye çalışır. Bir istemci ilk isteği tamamladıktan sonra, istemci bağlantıyı açık tutabilir ve aynı soketi kullanarak başka istekleri gönderebilir. Bu, TCP bağlantıları oluştururken önemli ek yük tasarrufu sağlayabilir. Bununla birlikte, Apache geleneksel olarak tüm alt süreci / iş parçacığını istemciden gelen verileri bekleyerek tutar, bu da kendi dezavantajlarını getirir. Bu sorunu çözmek için bu MPM, hem Dinleme soketlerini hem de Canlı Tut durumundaki tüm soketleri işlemek için özel bir iş parçacığı kullanır.
Sadece 'erteleme' çünkü ne yazık ki, o, ya da çalışmaz sonra bir istek tamamlandıktan istemciden yeni isteği beklerken.
PHP
Şimdi, sorunun diğer tarafını göz önünde bulundurursak, sorunu kuyruklu yıldız isteği başına bir iş parçacığı tutmakla çözseniz bile, istek başına bir PHP iş parçacığına ihtiyacınız olacak - bu nedenle FastCGI yardımcı olmayacak.
Sen gibi bir şey gerekiyor continuations onlar tarafından tetiklenen olay algılandığında, kuyruklu yıldız istekleri devam edilmesini sağlar. AFAIK, bu PHP'de mümkün olan bir şey değil. Bunu yalnızca Java'da gördüm - Apache Tomcat sunucusuna bakın .
Düzenle:
Burada , aynı sunucunun 80 numaralı bağlantı noktasında hem bir apache sunucusunu hem de bir kuyruklu yıldız etkin sunucuyu (örneğin jetty, tomcat for Java) çalıştırmanıza izin verecek bir yük dengeleyici ( HAProxy ) kullanma hakkında bir makale var .