繁体   English   中英

如何在Rails中每隔几秒钟运行一些动作10分钟?

[英]How to run some action every few seconds for 10 minutes in rails?

我正在尝试构建类似于app的quizup,并希望每10秒发送一次带有2分钟随机问题的广播。 如何使用Rails做到这一点? 我正在使用动作电缆发送广播。 我可以每隔几秒钟使用rufus-scheduler来运行一个动作,但是我不确定在我的用例中使用它是否有意义。

最简单的解决方案是派生一个新线程:

Thread.new do
  duration = 2.minutes
  interval = 10.seconds
  number_of_questions_left = duration.seconds / interval.seconds

  while(number_of_questions_left > 0) do
    ActionCable.server.broadcast(
      "some_broadcast_id", { random_question: 'How are you doing?' }
    )
    number_of_questions_left -= 1
    sleep(interval)
  end
end

笔记:

  • 这只是一个简单的解决方案,实际上您要花掉2分钟以上的总运行时间,因为每个循环实际上要休眠的时间超过10秒。 如果这个差异不重要,那么上面的解决方案将已经足够。

  • 而且,与诸如sidekiq类的专用后台工作人员相反,这种调度程序仅保留在内存中。 因此,如果rails进程被终止,那么所有当前正在运行的“循环”代码也将终止,您可能有意想要或不想要。

如果使用rufus-scheduler

number_of_questions_left = 12

scheduler = Rufus::Scheduler.new

# `first_in` is set so that first-time job runs immediately
scheduler.every '10s', first_in: 0.1 do |job|
  ActionCable.server.broadcast(
    "some_broadcast_id", { random_question: 'How are you doing?' }
  )
  number_of_questions_left -= 1
  job.unschedule if number_of_questions_left == 0
end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM