在没有轮询的情况下在网页上显示后台作业详细信息
问题描述:
我正在使用延迟作业更新数据库中的记录。我想显示由网页上延迟作业更新的记录数。我可以做ajax轮询,并且可以显示迄今已更新的记录数,但我认为ajax轮询并不是好的方法,因为它会增加服务器的开销。在没有轮询的情况下在网页上显示后台作业详细信息
是否有任何替代Ajax轮询。
答
你也可以尝试使用来自rails的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完成,我会让你知道它。
$(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
我会给它尝试.. –
耶它叫做'websocket' :)如何获取在js文件的更新值
例子 – Abhinay
在网络套接字可以在rails的后台作业发送数据到网页 –
为什么你需要后台工作来完成这项任务。更好的选择是在表中的某处保存计数并继续,如果您唯一的担心是用'delayed_job'更新最新数量的更新记录的网页。你可以尝试'ActionController :: Live'模块,不知道它有多可行,但看看它是否适合你的用例。下面提供一个例子。 – Abhinay