#ajax #polling #ajax-polling
#ajax #опрос #ajax-опрос
Вопрос:
У меня есть веб-приложение, которое полагается на очень «живые» данные — поэтому ему требуется обновление каждые 1 секунду, если что-то изменилось.
Мне было интересно, каковы плюсы и минусы следующих решений.
Решение 1 — Часто опрашивать
Итак, каждые 1 секунду я отправляю запрос на сервер и получаю обратно некоторые данные. Как только у меня есть данные, я жду 1 секунду, прежде чем повторить все это снова. Я бы обнаружил на стороне клиента, изменилось ли состояние, и предпринял соответствующие действия.
Решение 2 — Блокировать много
Итак, я запускаю запрос к серверу, время ожидания которого истекает через 30 секунд. Сервер следит за данными на сервере, проверяя их один раз в секунду. Если сервер замечает, что данные изменились, он отправляет данные обратно клиенту, который предпринимает соответствующие действия.
Сценарий
По сути, данные достаточно малы по размеру, но изменяются через случайные промежутки времени в зависимости от текущих событий. Дело в том, что веб-интерфейс будет запускать что-то в районе 2000 экземпляров, так что у меня есть 2000 запросов в секунду, поступающих из пользовательского интерфейса, или у меня есть 2000 длительных запросов, которые занимают до 30 секунд?
Помощь и советы были бы весьма признательны, особенно если вы работали с AJAX-запросами в аналогичных объемах.
Комментарии:
1. Это сильно зависит от типа данных и запросов. Вероятно, вы можете создавать (и обновлять) статические файлы json и запрашивать их. Поскольку они статичны — они могут обслуживаться каким-нибудь хорошим веб-сервером (например, nginx) очень быстро.
2. Действительно интересный вопрос 1.
3. @zerkms — Мне интересно, можете ли вы расширить ответ? @Pete Wilson — спасибо — Я работаю над системой реальной телефонной связи на основе веб-браузера, которая действительно классная, поскольку она создает проблемы, с которыми вы просто не сталкиваетесь в большинстве приложений, которые вы пишете.
Ответ №1:
Одним из распространенных решений для таких случаев является использование статических файлов json. Серверные скрипты обновляют их при изменении данных, и они обслуживаются быстрым и легким веб-сервером (например, nginx). Поскольку файлы статичны и малы — веб-сервер сделает это прямо в кэше, очень быстрым способом.
Комментарии:
1. Это звучит как хорошая идея — есть ли вероятность, что вы столкнетесь с конфликтом при записи файла (т. Е. Мы обслуживаем 1000 клиентских компьютеров, поэтому мы записывали бы этот файл раз в 2 секунды, вызовет ли это проблему, если клиенты попытаются получить файл, пока мы его обновляем)?
2. @Sohnee: тогда не обновляйте этот файл. Создайте временный файл и выполните
mv
(что происходит мгновенно).
Ответ №2:
Рассмотрите лучшую архитектуру. Правильно реализовать такую систему обмена сообщениями в чем-то вроде NodeJS тривиально. Отправка сообщений будет мгновенной, и вам не нужно будет запрашивать ваши данные ни с одной из сторон.
Вам не нужно переписывать всю вашу систему: производитель данных может просто POST
отправлять обновления на сервер NodeJS вместо записи их в файл, и в качестве бонуса вам даже не нужно тратить время на ввод-вывод с диска.
Если вы начали, не зная ни одного NodeJS, вы все равно могли бы закончить через пару часов, потому что вы можете просто взломать пример чата.
Ответ №3:
Я пока не могу комментировать, но я бы согласился с geocar. Запуск живых или почти живых веб-сервисов с помощью простого опроса будет решением, застрявшим между молотом и наковальней.
Вы также могли бы заглянуть в веб-сокеты, чтобы разрешить push, поскольку это звучит лучшим решением для этого, чем просто обновление каждую секунду до 30 секунд.
Удачи!