2013-06-26 2 views
2

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

Я использую Ajax в jQuery с Rails, и мой вопрос: как долго будет сохраняться страница .erb Ajax? Будет ли точка, в которой я должен обновить страницу или повторно инициализировать? Или это не будет проблемой?

+0

Какую версию рельсов вы используете? В рельсах 4 есть функция потокового вещания, которая звучит так, как будто она может удовлетворить ваши требования. [проверить это сообщение в блоге о потоковых данных] (http://rubysnippets.com/2013/04/10/rails-4-live-streaming-versus-node-dot-js/) – plasticide

+0

Я использую 3.2. Но о чем я должен заботиться? – Alexey

+0

, так что кажется, что вам нужна страница, которая отображает текущее состояние какого-либо процесса. Определенные тайм-ауты для отображения страницы. Они могут различаться в зависимости от конфигурации сервера приложений (например, единорога). Если ваша фоновая страница всегда возвращает текущее состояние, ваш вызов ajax может запускаться в цикле для периодического опроса страницы и обновления страницы вашего приложения, что устраняет необходимость в открытом соединении. – plasticide

ответ

0

Ajax означает асинхронный Javascript и XML. Что он делает, это отправлять запросы на сервер и обрабатывать его ответы асинхронным способом; без необходимости обновлять вашу страницу.

Запрос на HTTP-сервер - это не то, что остается открытым (если вы не настроите его на открытие соединений и, как правило, это не так). Протокол HTTP не имеет состояния, и это означает, что каждый запрос, который вы отправляете на сервер, будет рассматриваться без подключения вообще с предыдущими запросами. Фактически, для поддержания состояния между запросами, которые вы получили, чтобы управлять этим уровнем на веб-приложении, который в этом случае является рельсами, отправка идентификатора сеанса браузера на сервер (обычно идентификатор сеанса, хранящийся локально в cookie-браузере клиента) который может быть обработан вашим приложением rails для идентификации открытого сеанса.

Таким образом, если ваш интерфейс не взаимодействует с HTTP-сервером с постоянными соединениями, ваш сервер не будет поддерживать соединение, установленное при открытии веб-браузера. Он отправит ответ и закроет соединение.

Что позволяет AJAX делать запросы на сервер и обрабатывать ответы без перезагрузки страницы. HTTP-сервер откроет соединение до тех пор, пока оно не ответит на запрос вашего веб-браузера, после чего соединение будет закрыто, поэтому непрерывность не будет сохранена.

Чтобы обновить данные на вашем эрби-представлении, вам нужно управлять этим с помощью jQuery, отправляя запросы каждые х раз. Ниже приведен пример, который делает запрос ajax каждые 1 секунду.

setInterval("fetchDataAndUpdateView();", 1000); 
fetchDataAndUpdateView = function(){ 
    jQuery.ajax({ 
    url: "your-url", 
    success: function(){ 
     //do something here to update your html with the data you got from the server 
    } 
    }) 
}); 
+0

Но у этого есть интервал. Мне нужно в реальном времени. – Alexey

+0

@Alexey В этом случае вы должны использовать Rails 4 ИЛИ Socket (Socket.io & Node.js для Rails). Кроме того, guille.mas предложила решение, которое будет проверять каждую секунду, что неплохо, почти в режиме реального времени. – MrYoshiji

+0

Вы говорите о потоке? Каково имя и версия вашего сервера? Я думал, что вы общаетесь с http-сервером, таким как Apache или nginx. –