2016-08-13 9 views
1

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

Есть ли альтернатива опроса ajax.

+0

да его называют 'websocket' :) – Abhinay

+0

В веб-сокете фоновая работа в рельсах отправляет данные на веб-страницу –

+0

Зачем нужна фоновая работа для выполнения этой задачи. лучший вариант - сохранить счет где-то в таблице и продолжить, если ваша единственная проблема - обновить веб-страницу с последним количеством обновленных записей 'delayed_job'. Вы можете попробовать 'ActionController :: Live' модуль, не уверен, насколько это возможно, но посмотрите, подходит ли он вашему прецеденту. приводя пример ниже. – Abhinay

ответ

0

вы также можете использовать модуль ActionController::Live из рельсов.

в контроллере:

class MyStreamController < ApplicationController 
    include ActionController::Live 
    def index 
    # calculate number of records... 
    response.headers['Content-Type'] = 'text/event-stream' 
    response.stream.write "Number of records updated: #{i}" 
    response.stream.close 
    end 
end 

Затем в файле Js (может быть application.js), написать код, чтобы указать на этот адрес: /my_stream, чтобы получить обновленное значение. Кроме того, вы можете сравнить его с предыдущим значением, и если он изменился, замените его, иначе проигнорируйте его. все может быть сделано с помощью javascript, я оставлю это до вас, чтобы понять это.

пример того, как извлечь обновленное значение в файле JS:

$(function(){ 
    var source = new EventSource('/my_stream'); 
    source.onmessage = function(e){ 
    console.log(e); // this is value you want to update on page 
    }; 
}); 

Примечание: Вы должны использовать потоковый сервер как puma и т.д., чтобы достичь его

+0

Я дам ему попробовать .. –