Преимущества программного обеспечения Comet по сравнению со стандартным длительным опросом

#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.