2012-03-16 1 views
8

Надеюсь, я могу объяснить это достаточно хорошо. Я работаю над созданием PHP library to handle ajax requests through PHP объектно-ориентированным способом. В настоящее время я размышляю над хорошим способом реализации долгого опроса, но мне интересно что-то.Длинный опрос с PHP на Apache

Apache не справляется с тем, что несколько соединений открыты очень хорошо. Модель потока за запрос делает Apache крайне неэффективным для длительного опроса. Использование таких серверов, как nginx и lighttpd, обрабатывает эти потоки намного лучше, поэтому в библиотеке я планирую реализовать различные функции, оптимизированные для конкретных серверов, доступных из одного вызова функции. В случае Apache, который, как оказалось, обладает огромной долей рынка для приложений PHP, мне нужно лучшее решение.

Есть ли способ разместить входящий запрос на удержание/паузу и продолжить обработку других запросов, пока я не буду готов повторно активировать его?

Я не уверен, что это имеет смысл или я даже на правильном пути. Какое возможное решение, которое рекомендует SO для длительного опроса в PHP на сервере Apache?

+0

Почему вы приостановили обработку на сервере? не заставит ли ваш пользователь ждать много? – Joseph

+0

С Apache он использует модель потока за запрос, поэтому первоначальный запрос страницы в приложении использует поток, а затем запрос ajax (называемый после загрузки DOM) будет использовать отдельный поток. Проблема в попытке большого объема трафика вызовет тысячи потоков и в конечном итоге отключит сервер. –

+0

У нас была аналогичная проблема, после включения длинной страницы загрузки ajax/PHP, запущенной в случайном порядке (cca каждые 4-5 загрузки), занимающей слишком много времени ... пока и только для уведомлений я решил это НЕ sleep() в PHP в любом случае, и переместил функцию timewait на javascript, так что теперь javascript запрашивает новое выполнение PHP каждый, например, 10s, но теперь загрузка страниц выглядит нормально. –

ответ

1

Это звучит как продолжение. Вы определенно не можете сделать это на PHP, любым элегантным способом. Если вы хотите это сделать, ваш лучший шанс - сохранить текущее состояние и написать код таким образом, чтобы вы могли возобновить работу с того места, где вы остановились при загрузке состояния.

+0

Я начинаю придерживаться того же вывода. Я думаю, что я просто собираюсь внедрить базовое решение для длительного опроса, а в документации/комментариях аннотировать, что он менее оптимален в определенных серверных средах. Таким образом, если кто-то хочет попытаться его использовать, базовая функциональность уже существует. –

0

Я не думаю, что есть решение. Вы не можете отличить запрос опроса от обычного запроса. Только избегайте Apache, который мог бы помочь (например, запустить nginx на 80, переслать все запросы в Apache на 81, кроме запросов на опрос).

Я также не думаю, что у вас есть проблема. Nginx или другой сервер не намного эффективнее Apache. Опрос - это запрос PHP, Apache с mod_php является менее или более хорошим выбором. Nginx не будет использовать меньше ресурсов, чем Apache в обслуживании PHP.

+4

'Nginx не будет использовать меньше ресурсов, чем Apache в обслуживании PHP.' вы уверены в этом? http://serverfault.com/questions/157520/apache-vs-nginx –

+0

Конечно. Я не читаю ничего в этом URL-адресе, в котором говорится об обратном. «mod_php немного быстрее, чем php-fpm», «cgi намного медленнее, чем mod_php» и т. д. Конечно, все зависит от того, сколько вы делаете длинный опрос против обычных файлов PHP/статических файлов, если у вас есть обратный прокси-сервер кэширования, поэтому что Apache не беспокоит статические файлы, сколько модулей вы используете в Apache ... – jcisio

 Смежные вопросы

  • Нет связанных вопросов^_^