2012-05-21 2 views
2

Я разработал веб-приложение, в котором подписанный пользователь должен отправить сообщение серверу, сообщая, что он все еще находится в сети каждые 3 секунды. Затем сообщение обрабатывается сервером, а хранимая процедура вызывается в Mysql, чтобы установить статус пользователя в онлайн. Я рассмотрел аналогичные проблемы, в которых сравниваются кометы и Ajax (here или here), но учитывая, что допустима 3-секундная задержка, и максимальные пользователи из 1000 находятся в сети в системе, использует Ajax по разумному выбору, или комета должна быть используемый?Ajax vs Comet (не чат-приложение)

+0

Как вы описали, вам необходимо отправить данные с клиента на сервер каждые 3 секунды. Поэтому для вашей потребности вы можете использовать AJAX. Всякий раз, когда вы хотите передавать информацию с сервера на клиент, где информация о доступности неизвестна, вы можете подумать о комете. – Seshagiri

+0

websockets ftw ;-) – zerkms

+0

веб-сокет не является вариантом, так как приложение должно работать в IE –

ответ

1

Для такого рода особенность кометы является более подходящим:

  • Ваши клиенты посылают сообщения (я онлайн)
  • Ваш сервер вещания обработанное сообщение (пользователь X по-прежнему онлайн)

Посредством ajax вы только обслуживаете сообщения на сервере.

Для того, чтобы получить «эффект широковещания» в режиме ajax. В итоге вы сделаете нечто похожее на комету, но с меньшей пропускной способностью.

Ajax:.

  • Клиент отправить сервер - я нахожусь в
  • Process Server
  • сервер отправить обратно к списку клиентов пользователя в

В этом случае каждый клиент спросить каждые 3 секунды база данных для COMPLETE «in».

В комете:

  • сервер X отправить клиента - я нахожусь в
  • Process Server
  • сервер отправить обратно клиенту S, что пользователь X по-прежнему онлайн

В этом случае каждый клиент сообщает серверу каждые 3 секунды, что он находится. Сервер отправляет обратно каждому подключенному клиенту ТОЛЬКО, что х по-прежнему в

Comet просто метод для передачи назад и толкать сообщения клиента Ajax является методом, чтобы передавать информацию клиента к серверу без необходимости обновлять всю страницу.

кавычки википедии: http://en.wikipedia.org/wiki/Comet_%28programming%29

Comet известен несколько других названий, в том числе Ajax Нажмите, Reverse Ajax, Двусторонний-сеть, HTTP Streaming и HTTP-сервер толчок среди других.

Так что комета :)

Если вы ничего не транслируется, то просто Ajax является лучшим вариантом

+0

сервер не передает ничего обратно клиенту. он просто вызывает процедуру в Mysql, когда клиент получает сообщение. процедура в основном является оператором SQL. –

+0

Тогда ajax более уместен – Krilivye

0

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

Это может быть сделано с использованием кометы, и в этом случае вы будете в основном пинговать каждого зарегистрированного клиента, чтобы убедиться, что он все еще подключен. Но вам все равно нужно будет запускать запрос в базе данных для каждого клиента, который отвечает, плюс вам все равно потребуется, чтобы клиент уведомил сервер о его первоначальном подключении. Итак, мне кажется, что комета будет больше проблем, чем того стоит. Единственное, что может иметь смысл, это то, что вы могли бы пинговать каждого зарегистрированного клиента и хранить ответы в памяти, а затем, когда все клиенты были pinged, вы можете запустить один единственный запрос, чтобы обновить все их статусы. Это даст вам дополнительный бонус знания, как только клиент отключится, а не ждет тайм-аута. К сожалению, это выходит за рамки моего опыта работы с Comet, поэтому на данный момент я не могу помочь реализовать его.