#php #long-polling
#php #длительный опрос
Вопрос:
Я ни за что на свете не могу понять, для чего такие приложения, как Cometd или simple-comet, используют что-то вроде простого запроса с длительным опросом с помощью php и бесконечного цикла с кодом, подобным этому
$time = time();
while(time() - $time < 30) {
if ($query) {
$shapes = ...;
echo json_encode($shapes);
break;
}
usleep(25000);
}
работает на веб-сервере, который предназначен для нескольких запросов, таких как lighttpd или NGIX.
может быть, мне просто не хватает понимания документации comet services. Я знаю, что выше приведен запрос «Comet», но почему существуют такие вещи, как cometd, что они делают лучше.
Комментарии:
1. Во-первых, нет задержки в 250 мс между ответами, как в вашем примере. Кроме того, вам не обязательно создавать отдельный PHP-процесс для каждого активного соединения. Эти вещи довольно тяжелые. У вас должно быть открыто намного больше соединений comet на сервер, чем вы могли бы иметь с эквивалентным решением для длительного опроса PHP.
2. @frank apache — единственный веб-сервер, который оставляет поток для каждого соединения. lighttpd на самом деле предназначен для многопоточных соединений.
3. Хотя сам PHP на самом деле не потокобезопасен — конечно, многие модули PECL таковыми не являются. С lighttpd / nginx, разве в конечном итоге вы не получаете PHP CGI proc, работающий для каждого активного соединения?
4. @Frank из того, что я прочитал, нет, я попытаюсь добавить некоторые источники к моему вопросу
Ответ №1:
Cometd и подобное программное обеспечение, такое как orbitd, отлично подходят для разделения зон ответственности. Мои службы python, поддерживаемые lighttpd, могут сосредоточиться на выполнении более сложной работы, в то время как служба comet привязана к очереди сообщений для обработки уведомлений о легких сообщениях (например, пакетный запрос завершен, вы получили новое сообщение и т.д.), В то время как серверы lighttpd обрабатывают запросы БД или запросы POST / PUT / DELETE.
И последнее, Apache по-прежнему остается очень популярным веб-сервером, но он погибнет в лучах славы, если попытается поддерживать открытыми тысячу или более соединений. Для платформы с множеством серверов apache, которая хочет добавить поддержку comet, имело бы смысл использовать готовое решение, а не переходить на lighttpd или nginx.