Уведомление клиента, должен ли я использовать AJAX Push или опрос?

StackOverflow https://stackoverflow.com/questions/219868

Вопрос

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

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

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

Спасибо за вашу помощь.

Редактировать:Я изучил простой AJAX Push и реализовал простую демонстрацию, основанную на этом Статья автор: Майк Первис.Нагрузка на клиент довольно низкая - около 5 кб для начальной версии, и ожидается, что она останется такой в течение довольно долгого времени.


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

Это было полезно?

Решение

Поскольку использование push требует поддержания открытого HTTP-соединения между вашим сервером и каждым клиентом, я бы тоже выбрал poll - это не только потребует много ресурсов сервера, но и будет значительно сложнее реализовать, как упоминал Мэтт б.

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

Редактировать (2017):Я бы сказал, что сейчас вы выбираете между websockets и длительным опросом (упоминается в другом ответе).Похоже, что длительный опрос может быть правильным выбором, исходя из того, как в вопросе упоминается, что уведомления не обязательно получать в режиме реального времени, нечастый период опроса было бы довольно легко реализовать и он не должен сильно обременять ваш сервер.Websockets - это круто и отличный выбор для многих приложений в наши дни, хотя в данном случае это может показаться излишеством.

Другие советы

Я удивлен, что никто здесь не упомянул о длительном опросе.Длительный опрос означает сохранение открытого соединения в течение более длительного периода (скажем, 30-60 секунд), и как только оно будет закрыто, снова откройте его и просто попросите сокет / соединение прослушивать ответы.Это приводит к меньшему количеству подключений (но более длинным) и означает, что ответы приходят почти мгновенно (некоторым, возможно, придется ждать нового подключения для опроса).Я хотел бы добавить, что в сочетании с такими технологиями, как NodeJS, это приводит к созданию очень эффективного и экономичного решения, которое на 100% совместимо со всеми основными браузерами и версиями и не требует никаких дополнительных технологий, таких как Comet или Flash.

Я понимаю, что это старый вопрос, но подумал, что все еще может быть полезно предоставить эту информацию :)

Определенно используйте push, это намного круче.Если вам просто нужны простые уведомления, я бы использовал что-то вроде Push - Сервер StreamHub чтобы сделать тяжелую работу за тебя.Разработка собственной функциональности Ajax Push - чрезвычайно сложный и каменистый путь - вы должны заставить ее работать во всех браузерах, а затем обрабатывать брандмауэры и прокси, уничтожающие поддерживаемые соединения и т.д...Зачем заново изобретать колесо.Кроме того, он занимает такую же малую площадь - менее 10 КБ, так что он должен подойти, если это является для вас приоритетом.

Оба имеют разные требования и учитывают разные сценарии.

Если вам нужно обновления в реальном времени, как и в онлайн-чате, push является обязательным.

Но, если период обновления большой, как и в вашем случае (5 минут), тогда пул является подходящим решением.Push, в этом случае, потребует больших ресурсов как от клиента, так и от сервера.

Совет! попробуйте сделать страницу, которая проверяет пул, быстрой и чистой, чтобы она не потребляла много ресурсов сервера при каждом запросе.Что я обычно делаю, так это сохраняю флаг в памяти (например, в переменной сеанса), который сообщает, пуст пул или нет...итак, я заглядываю в бассейн только в том случае, если он не пуст.Когда пул пуст, что происходит большую часть времени, запрос страницы выполняется чрезвычайно быстро.

Я бы внедрил опрос только потому, что это звучит проще в написании, и сохранение его простоты очень ценно.

Не уверен, что вы ознакомились с некоторыми из существующих реализаций COMET (это то, что вы подразумеваете под AJAX push).

Если пользователь просматривает сайт, не будет ли это фактически означать запрос информации с сервера, на который может быть отправлено это уведомление?

Невозможно сказать, будет ли опрос дороже, чем продвижение, не зная, сколько клиентов у вас будет.Я бы рекомендовал провести опрос, потому что:

  • Похоже, вы хотите обновлять данные примерно раз в минуту.Если уведомления не могут приходить с гораздо большей скоростью, чем это, нажатие будет означать, что вы поддерживаете HTTP-соединение открытым, но видите на нем очень мало активности.
  • Опрос построен поверх существующих HTTP-соглашений, поэтому любой сервер, который взаимодействует с веб-браузерами, уже готов отвечать на обычные Ajax-запросы.К решению на основе Comet или Flash–сокетов предъявляются другие требования;вам понадобится что-то вроде cometd на стороне сервера и клиентской библиотеке, которая использует серверный push.

Так что, если вам нужно что-то сверхпрочное для управления потоком данных и огромной загрузкой клиентов, я бы порекомендовал Comet.Но, похоже, это не так.

Теперь там есть служба http://pusherapp.com то есть пытается решить эту проблему раз и навсегда, в мгновение ока.Возможно, стоит проверить.(отказ от ответственности:я никоим образом не связан с ними).

Я сам этого не пробовал, но некоторые говорят COMET работает и это проще, чем вы думаете.Существует также плагин Ruby on Rails под названием Джаггернаут о котором, как я слышал, много говорили.Опять же, я не использовал его, так что YMMV, но, насколько я понимаю, это требует гораздо меньше ресурсов по сравнению с опросом.Я верю (кто-нибудь может подтвердить?) что КОМЕТА - это то, как MacRumorsLive.com ведет прямой блог WWDC Stevenotes.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top