PHP, запущенный в режиме php-fpm, все равно будет иметь ограничения, особенно если ваш код потребляет много памяти. Вы не сможете запускать тысячи параллельных процессов без некоторой доступной памяти. Но обычно он работает быстрее, чем mod_php, и по крайней мере HTTP-запрос, который не требует PHP, обрабатывается веб-сервером, и если этим веб-сервером является nginx, вы получите намного больше HTTP-запросов, доступных параллельно.
С php-fpm у вас также будет очередь ожидающих запросов, которая может быть полезна в случае временного большого трафика, так как по крайней мере запросы помещаются в очередь, а не отклоняются.
Теперь длинные операции опроса в порядке с nginx (или другими, это пример), но не с PHP. PHP не предназначен для длительного использования , каждый запрос - это новый процесс, это действительно неправильный выбор для KeepAlive. Но " Divide ut regnes " (разделяй и властвуй). Ваши длинные опросы могут выполняться рядом с вашим PHP-приложением, но без вашего PHP-приложения.
В качестве примера рассмотрим проект jappix , это проект PHP. Но вам нужно где-то установить сервер XMPP (например, ejabberd) и сервер BOSH с nginx в качестве прокси на порту 80 к этому серверу BOSH (так что у вас есть протокол чата xmpp на порту 80, через nginx и ejabberd, и ничего на сторона PHP для этого). Тогда проблема заключается в том, чтобы подключить аутентификацию, идентификацию и т. Д. Вашего приложения, и это нужно будет сделать, расширив конфигурацию сервера XMPP (чтобы он использовал тот же сервер LDAP, что и ваше PHP-приложение, например).
Вторая проблема с длительным опросом - это состояние очереди. Вы можете найти некоторые расширения XMPP для этого, может быть. Или вы можете выполнять регулярные запросы Ajax в очереди. Одним из полезных приемов, позволяющих избежать большого количества запросов ajax в вашем приложении PHP, является перепланирование следующей проверки ajax обратного вызова ajax проверки, основанной на числах Фибоначчи (это пример). Поэтому первый раз следующий вызов ajax будет запланирован через 1 минуту, в следующий раз через 2 минуты, затем через 3, 5, 8, 13, 21, 34, 55, 89, 144 и т. Д. Идея заключается в том, что, возможно, важно проверить новых сообщений 1 минута после загрузки страницы. Поскольку пользователь все еще читает ту же страницу (или пьет кофе, разговаривает с другом, уходит в отпуск, не выключая компьютер и т. Д.), Мы можем все больше откладывать следующие проверки. Это способ предположить, что пользователь не очень активен. Обратите внимание, что вы можете обнаружить активность пользователя другими способами и изменить расписание.