Частота опроса AJAX - длительный опрос или не длительный?

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

1) Отправляйте AJAX-запрос каждые 1 или 2 секунды для проверки обновлений. Каждый запрос немедленно возвращается независимо от наличия новых данных.
2) Запустите один AJAX-запрос, который не будет возвращен до тех пор, пока он не получит данные или не истечет время ожидания. При любом из этих событий он запускает следующий запрос. (Я думаю это называется длинный опрос?)

Количество запросов к базе данных будет одинаковым с любым из них, но с №2 будет меньше запросов на выполнение из браузера, что может сэкономить пропускную способность и ресурсы клиента. Для сервера, лучше ли иметь один PHP-запрос, который остается активным и спит между запросами, или он запускается каждые несколько секунд, опрашивает БД, а затем выключается? Или нет никакой разницы, и я слишком об этом подчеркиваю?

РЕДАКТИРОВАТЬ: я полагаю, я должен также заявить, что это виджет чата большого веб-приложения. Небольшая задержка в общении не убьет пользователя, так как чат является второстепенной функцией.

 Derek01 окт. 2010 г., 21:22
К сожалению, я не контролирую инфраструктуру ... это PHP или ничего. Кроме того, существуют ограничения на такие вещи, как Jabber, из-за среды, в которой он будет установлен.
 ircmaxell01 окт. 2010 г., 20:57
Честно говоря, я бы не стал делать это в PHP. Получите другой язык, внедрите систему очередей и используйте постоянные TCP-соединения, чтобы разговаривать взад-вперед ... Или, почему бы просто не установить Jabber и все готово (и, возможно, реализовать интерфейс JS для сервера) ...
 ircmaxell01 окт. 2010 г., 20:40
Это действительно зависит от того, как долго будет длиться опрос, и от количества клиентов, к которым вы подключаетесь. Если у вас есть 2 или 3, длинный опрос может работать лучше (так как обновления будут мгновенными). Если у вас много, длинный опрос будет ОЧЕНЬ дорогостоящим, поскольку каждое соединение требует PHP-процесса (поскольку PHP удерживает его открытым). Так что в этом случае я бы использовал «умный» интервал опроса. Как правило, если среднее время обновления составляет 10 секунд, выполните опрос 5, затем 8, затем 10, затем 11 и т. Д.). В основном просто сократить время вдвое. Это проще на сервере (так как средняя нагрузка падает), но быстро ...
 Derek01 окт. 2010 г., 20:43
Полагаю, мне следует также указать, что это виджет чата для большого веб-приложения. Небольшая задержка в общении не убьет пользователя, так как чат является второстепенной функцией. Но мы хотим, чтобы это было разумно (в течение 2 секунд?)

Ответы на вопрос(1)

Решение Вопроса

ервер), чем опрос, и в то же время даст намного лучшее время ответа.

Если ваш получатель опрашивает, среднее время прохождения сообщения будет вдвое меньше вашего интервала опроса.

С длинным опросом, его момент - сервер только ждет, если нечего сказать.

Если вы делаете чаты, зайдите в длинный опрос; это удобство использования.

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

 Will01 окт. 2010 г., 22:02
Убедитесь, что эти процессы спят хорошо, а не в каком-то отдельном опросе, и все будет хорошо и гладко. Беспокойство, когда у вас есть несколько сотен или, возможно, больше клиентов.
 Derek01 окт. 2010 г., 21:25
Согласовано. Но с дюжиной клиентов, попавших в систему, это дюжина php-процессов, которые активны 100% времени. Что касается масштабируемости, я думаю, что это не намного хуже, чем вдвое меньше, чем попадать в нее каждую секунду.

Ваш ответ на вопрос