Как я могу позволить моему пользователю наилучшим образом взаимодействовать с XML-данными в реальном времени из канала?

#javascript #ruby-on-rails

#javascript #ruby-on-rails

Вопрос:

Я пишу приложение Ruby on Rails (3), которое полагается на XML-канал, который обновляется ~ 30 секунд. Должен ли я анализировать xml-данные на моем сервере с помощью какого-либо работника? Если это так, сможет ли сервер отвечать клиенту достаточно быстро, чтобы оставаться «в режиме реального времени». Я думал, что это можно было бы сделать с помощью javascript, но я не уверен.

Редактировать: Каждое обновление будет иметь объем около 70 КБ, а источник xml способен обрабатывать множество подключений.

Нет, эта информация не будет сохранена в базе данных. Пользователь будет иметь доступ к XML-данным только для чтения.

Возможно ли прямое подключение к xml-серверу с помощью javascript на стороне клиента?

Комментарии:

1. Сколько одновременных пользователей? Сколько нового XML доступно каждые 30 секунд? Если только один пользователь и каждое обновление составляет 10 тысяч, проще простого 🙂 если у вас десять тысяч пользователей и каждое обновление составляет 10 миллионов, об этом позаботятся…

2. сохраняете ли вы их в базе данных (обновляете модель?) или что вы с ними делаете.

Ответ №1:

Есть 3 реальных способа подойти к этому. Я не сторонник ruby, но ни один из этих методов также не является специфичным для ruby.

  • Периодически обновляйте саму страницу, чтобы получать самую свежую ленту. Это старый способ сделать это, и, хотя он надежен, он не очень удобен для пользователя.
  • Периодически извлекайте новые данные через AJAX и добавляйте их к элементам пользовательского интерфейса веб-страницы по мере необходимости. Вероятно, это ваш лучший выбор в сценарии с большим объемом, поскольку он не сохраняет никаких активных подключений к серверу и не обновляет всю страницу. Он также страдает тем же недостатком, что и вариант 1, который заключается в том, что обновления не выполняются в режиме реального времени.
  • Если у вас достаточно небольшая аудитория или серверов, чтобы разделить нагрузку, вы могли бы использовать подход comet. По сути, каждый запрос к странице открывает другой длительный запрос в невидимом iframe. Вывод потока, обслуживающего этот запрос, представляет собой серию небольших обновлений в режиме реального времени в форме javascript, который запускает обновление элементов пользовательского интерфейса. Затем вам нужно разработать процесс на сервере, который анализирует входные данные в режиме реального времени и уведомляет каждое активное соединение о новых данных.

Краткое описание: Используйте настройку типа COMET, если вам абсолютно необходим доступ к данным в режиме реального времени и / или ваша целевая аудитория достаточно мала, чтобы справиться с нагрузкой. В противном случае используйте периодические обновления AJAX.

Комментарии:

1. Как вы думаете, не могли бы вы указать мне на какие-нибудь ресурсы для второго варианта?