Я создаю компонент веб-страницы, который требует относительно постоянного опроса базы данных. Я могу видеть два разных подхода к этому, и мне интересно, один из них лучше других, или если у меня отсутствует третий вариант.Частота опроса AJAX - длительный опрос или не длительный опрос?
1) Отправляйте запрос AJAX каждые 1 или 2 секунды, чтобы проверить наличие обновлений. Каждый запрос немедленно возвращает, есть ли новые данные.
2) Выключите один запрос AJAX, который не вернется, пока не получит данные, или не произойдет тайм-аут. По любому из тех, что происходит, он запускает следующий запрос. (Я думаю, что это называется длинным опросом?)
Количество запросов к базе данных будет одинаковым с любым из них, но с # 2 будет меньше запросов от браузера, которые могут сэкономить пропускную способность и ресурсы клиента. Для сервера лучше ли иметь один PHP-запрос, который остается активным и спящий между запросами или который срабатывает каждые несколько секунд, обследует БД, а затем выключается? Или нет никакой разницы, и я подчеркиваю это слишком много?
EDIT: Предположим, я также должен указать, что это чат-виджет большого веб-приложения. Небольшая задержка в связи не собирается убивать пользователя, так как чат является вторичной функцией.
Это зависит от того, как долго будет длительный опрос, и количества клиентов, с которыми вы подключаетесь. Если у вас есть 2 или 3, длительный опрос может работать лучше (поскольку обновления будут мгновенными). Если у вас много, длительный опрос будет ОЧЕНЬ дорогим, поскольку для каждого подключения требуется PHP-процесс (так как это PHP, который держит его открытым). Поэтому в этом случае я бы использовал «умный» интервал опроса. В основном, если среднее время обновления - 10 секунд, опрос - 5, затем 8, затем 10, затем 11 и т. Д.). В основном просто сократить время вдвое. Это проще на сервере (поскольку средняя нагрузка падает), но быстро ... – ircmaxell
Я полагаю, я должен также указать, что это чат-виджет большого веб-приложения. Небольшая задержка в связи не собирается убивать пользователя, так как чат является вторичной функцией. Но мы хотим, чтобы это было разумным (в течение 2 секунд?) – Derek
Честно говоря, я бы не сделал этого в PHP. Получите еще один язык и внедрите систему очередей и используйте постоянные TCP-соединения для разговора туда и обратно ... Или почему бы просто не установить Jabber и не сделать (и, возможно, реализовать JS-интерфейс для сервера) ... – ircmaxell