标签: ruby-on-rails sidekiq delayed-job
Debouncing 是将函数/作业从执行推迟到经过一定时间后的常用方法。
用例:来自多个用户的有效聊天对话,他们不应该收到每个键入的消息的电子邮件通知。但是,在几分钟的沉默之后,如果消息未读,则用户应该看到通知。
Rails后台任务
有效作业
没有解决方案
delayed_job的
没有解决方案,有相关问题:https://github.com/collectiveidea/delayed_job/issues/72
Sidekiq
https://github.com/hummingbird-me/sidekiq-debounce
答案 0 :(得分:0)
我要做的是安排定期任务,让我们说每5分钟检查是否有人需要通知。是的,这似乎是一项昂贵的操作,但对于您的使用案例,我不会(现在)看到其他解决方案。因此,假设您有10个使用聊天的用户。每隔5分钟,您就可以检查是否有用户没有看到某些消息,如果有,则只有在N分钟内处于非活动状态时才通知他们。
要安排此类任务,您可以使用crono gem。请检查此answer。
Crono让你做那样的事情:
Crono.perform(CheckUsersToBeNotifiedJob).every 5.minutes