1

我正在使用延迟作业更新数据库中的记录。我想在网页上显示延迟作业更新的记录数。我可以进行 ajax 轮询,并且可以显示到目前为止更新的记录数,但我认为 ajax 轮询不是好方法,因为它会增加服务器的开销。

是否有任何替代ajax轮询的方法。

4

1 回答 1

0

您也可以尝试使用ActionController::Liverails 中的模块。

在您的控制器中:

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)中,写一段代码指向这个 url:/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等的线程服务器来实现它

于 2016-08-13T09:12:29.480 回答