我尝试创建以设定的间隔运行的心跳,以确保用户仍在页面上。我已经完成了:
(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秒的更新。我假设很多人在应用程序中做过类似的事情,我想要了解最好的方法吗?
是否让它更新数据库中的列并使后台作业持续运行?还是有一些更有效的方式?
答案 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
上暂停... :-)