Погоджуючись / розширюючи вже сказане, я не думаю, що FastCGI вирішить проблему.
Апачі
Кожен запит в Apache використовуватиме один робочий потік, поки запит не завершиться, що може тривати довгий час для запитів COMET.
У цій статті про Ajaxian згадується використання COMET на Apache, і що це важко. Проблема не стосується PHP і стосується будь-якого внутрішнього модуля CGI, який ви можете використовувати на Apache.
Запропонованим рішенням було використання модуля MPM 'event', який змінює спосіб надсилання запитів до робочих потоків.
Цей MPM намагається виправити "проблему збереження життя" в HTTP. Після того, як клієнт виконає перший запит, клієнт може тримати з'єднання відкритим і надсилати подальші запити, використовуючи той самий сокет. Це може заощадити значні накладні витрати при створенні TCP-з'єднань. Однак Apache традиційно тримає цілий дочірній процес / потік в очікуванні даних від клієнта, що приносить свої недоліки. Для вирішення цієї проблеми цей MPM використовує виділений потік для обробки як сокетів прослуховування, так і всіх сокетів, які перебувають у стані Keep Alive.
На жаль, це теж не працює, оскільки воно буде «відкладатися» лише після завершення запиту, чекаючи нового запиту від клієнта.
PHP
Тепер, враховуючи іншу сторону проблеми, навіть якщо ви вирішите проблему, затримавши один потік на запит комети, вам все одно знадобиться один потік PHP на запит - ось чому FastCGI не допоможе.
Вам потрібно щось на зразок Продовжень, які дозволяють відновлювати запити комети, коли спостерігається подія, яку вони ініціюють. AFAIK, це не те, що можливо в PHP. Я бачив це лише на Java - див . Сервер Apache Tomcat .
Редагувати:
Тут є стаття про використання балансувача навантаження ( HAProxy ), що дозволяє запускати як сервер apache, так і сервер із підтримкою комет (наприклад, причал, tomcat для Java) на порту 80 того самого сервера.