后端使用ajax来检测用户是否不再处于活动状态

时间:2016-03-11 11:49:54

标签: ruby-on-rails

我尝试创建以设定的间隔运行的心跳,以确保用户仍在页面上。我已经完成了:

(function worker() {
  $.ajax({
    type: 'POST',
    url: '/users/' + <%= current_user.id %> + '/heartbeat', 
    success: function(data) {
      console.log('updated')
    },
    complete: function() {
      setTimeout(worker, 5000);
    }
  });
})();

现在我要在后端执行的操作是将状态更改为current_user.inactive!,如果它没有收到30秒的更新。我假设很多人在应用程序中做过类似的事情,我想要了解最好的方法吗?

是否让它更新数据库中的列并使后台作业持续运行?还是有一些更有效的方式?

1 个答案:

答案 0 :(得分:0)

我会把这个功能放在我的&#34; check-session&#34;过滤。即,无论何时处理请求,除了确保用户登录等,还要检查他的会话是否超时。

编辑:示例伪代码

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

然后其他控制器像往常一样从ApplicationController继承。

顺便说一句,您可能不希望在用户上获得心跳,但是在会话上,对吗?如果您确定要用户,请将session替换为伪代码中的user

对您进行细化,即您可能不希望在LoginController上暂停... :-)