2010-10-01 5 views
14

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

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

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

EDIT: Предположим, я также должен указать, что это чат-виджет большого веб-приложения. Небольшая задержка в связи не собирается убивать пользователя, так как чат является вторичной функцией.

+0

Это зависит от того, как долго будет длительный опрос, и количества клиентов, с которыми вы подключаетесь. Если у вас есть 2 или 3, длительный опрос может работать лучше (поскольку обновления будут мгновенными). Если у вас много, длительный опрос будет ОЧЕНЬ дорогим, поскольку для каждого подключения требуется PHP-процесс (так как это PHP, который держит его открытым). Поэтому в этом случае я бы использовал «умный» интервал опроса. В основном, если среднее время обновления - 10 секунд, опрос - 5, затем 8, затем 10, затем 11 и т. Д.). В основном просто сократить время вдвое. Это проще на сервере (поскольку средняя нагрузка падает), но быстро ... – ircmaxell

+0

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

+0

Честно говоря, я бы не сделал этого в PHP. Получите еще один язык и внедрите систему очередей и используйте постоянные TCP-соединения для разговора туда и обратно ... Или почему бы просто не установить Jabber и не сделать (и, возможно, реализовать JS-интерфейс для сервера) ... – ircmaxell

ответ

8

Длинный опрос будет масштабироваться лучше (т.е. меньше нагрузки на сервер), чем опрос, в то время как дает гораздо лучше время отклика.

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

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

Если вы делаете чат-обмен сообщениями, пройдите длинный опрос; его юзабилити.

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

+1

Согласен.Но с дюжиной клиентов, попавших в систему, это десяток php-процессов, которые активны в 100% случаев. Что касается масштабируемости, я думаю, что это не намного хуже, чем вдвое меньше, чем каждый раз. – Derek

+0

Удостоверьтесь, что эти процессы спят красиво, а не на некоторых опросах, и все будет хорошо и плавно. Беспокоитесь, когда у вас есть несколько сотен или, возможно, больше клиентов. – Will

2

Вы также можете посмотреть на websockets, часть новейших браузеров (или эмулировать через Flash file упаду на странице)

+0

К сожалению, мне нужно иметь возможность поддерживать текущие и, возможно, устаревшие браузеры. Конечно, стоит еще несколько исследований. Благодаря! – Derek

+1

Вот что делает адаптер вспышки – Will

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