Ruby on rails 后端使用ajax检测用户是否不再处于活动状态
我正在尝试创建一个以设置的间隔运行的心跳,以确保用户仍在页面上。我已经做到了:Ruby on rails 后端使用ajax检测用户是否不再处于活动状态,ruby-on-rails,Ruby On Rails,我正在尝试创建一个以设置的间隔运行的心跳,以确保用户仍在页面上。我已经做到了: (function worker() { $.ajax({ type: 'POST', url: '/users/' + <%= current_user.id %> + '/heartbeat', success: function(data) { console.log('updated') }, complete: function() {
(function worker() {
$.ajax({
type: 'POST',
url: '/users/' + <%= current_user.id %> + '/heartbeat',
success: function(data) {
console.log('updated')
},
complete: function() {
setTimeout(worker, 5000);
}
});
})();
(函数工作者(){
$.ajax({
键入:“POST”,
url:'/users/'++'/heartbeat',
成功:功能(数据){
console.log('updated')
},
完成:函数(){
setTimeout(工人,5000);
}
});
})();
现在我想在后端做的是将状态更改为current\u user.inactive代码>如果它在30秒内没有收到更新。我假设你们中的很多人都在一个应用程序中做过类似的事情,我想知道最好的方法是什么
是否让它更新数据库中的一列,并让后台作业不断运行?或者有更有效的方法吗?我会将该功能放在我的“检查会话”过滤器中。也就是说,无论何时处理请求,除了确保用户已登录等之外,还应检查其会话是否超时
编辑:示例伪代码
class ApplicationController < ActionController::Base
before_filter do
session = ... # an ActiveModel instance
raise "Timeout" if session.last_action < 60.minutes.ago
session.last_action = Time.now
session.save!
end
end
class ApplicationController
然后,其他控制器照常从ApplicationController继承
顺便说一句,你可能不想让心跳在用户身上,而是在他的会话上,对吗?如果您确定要在用户身上使用它,那么当然可以将伪代码中的会话
替换为用户
细化留给您,即您可能不想在登录控制器上设置超时 这里有示例代码吗?看看是否适合我的情况。在我的情况下,用户可以在网站上生活,并等待分配(actioncable),因此如果用户离开网站,我希望该用户处于非活动状态。