我正在尝试构建类似应用程序的测验,并希望每 10 秒发送一次广播,随机问题持续 2 分钟。我如何使用 rails 做到这一点?我正在使用 Action 电缆发送广播。我可以使用 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
笔记:sidekiq
这样的专用后台 worker 。 .因此,如果 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
关于ruby-on-rails - 如何在 Rails 中每隔几秒运行一些 Action 10 分钟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50078563/