#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. Как вы думаете, не могли бы вы указать мне на какие-нибудь ресурсы для второго варианта?