Đồng ý / mở rộng những gì đã nói, tôi không nghĩ FastCGI sẽ giải quyết được vấn đề.
Apache
Mỗi yêu cầu vào Apache sẽ sử dụng một luồng công nhân cho đến khi yêu cầu hoàn thành, có thể mất nhiều thời gian đối với các yêu cầu COMET.
Bài viết này trên Ajaxian đề cập đến việc sử dụng COMET trên Apache, và nó rất khó. Vấn đề không phải riêng đối với PHP và áp dụng cho bất kỳ mô-đun CGI back-end nào mà bạn có thể muốn sử dụng trên Apache.
Giải pháp được đề xuất là sử dụng mô-đun MPM 'sự kiện' để thay đổi cách các yêu cầu được gửi đến các luồng công nhân.
MPM này cố gắng khắc phục 'sự cố tiếp tục tồn tại' trong HTTP. Sau khi máy khách hoàn thành yêu cầu đầu tiên, máy khách có thể giữ kết nối mở và gửi các yêu cầu khác bằng cách sử dụng cùng một ổ cắm. Điều này có thể tiết kiệm chi phí quan trọng trong việc tạo kết nối TCP. Tuy nhiên, Apache theo truyền thống giữ toàn bộ quy trình / luồng con để chờ dữ liệu từ máy khách, điều này mang lại những bất lợi riêng. Để giải quyết vấn đề này, MPM này sử dụng một luồng chuyên dụng để xử lý cả các ổ cắm Nghe và tất cả các ổ cắm ở trạng thái Keep Alive.
Thật không may, điều đó cũng không hoạt động, vì nó sẽ chỉ 'báo lại' sau khi một yêu cầu hoàn tất, chờ một yêu cầu mới từ khách hàng.
PHP
Bây giờ, xem xét mặt khác của vấn đề, ngay cả khi bạn giải quyết vấn đề bằng cách giữ một luồng cho mỗi yêu cầu sao chổi, bạn vẫn sẽ cần một luồng PHP cho mỗi yêu cầu - đây là lý do tại sao FastCGI sẽ không giúp được gì.
Bạn cần một cái gì đó như Tiếp tục cho phép các yêu cầu sao chổi được tiếp tục khi sự kiện chúng được kích hoạt được quan sát thấy. AFAIK, đây không phải là thứ có thể thực hiện được trong PHP. Tôi chỉ thấy nó trong Java - hãy xem máy chủ Apache Tomcat .
Biên tập:
Có một bài viết ở đây về việc sử dụng bộ cân bằng tải ( HAProxy ) để cho phép bạn chạy cả máy chủ apache và máy chủ hỗ trợ sao chổi (ví dụ: jetty, tomcat cho Java) trên cổng 80 của cùng một máy chủ.