Rails Ruby Rails 计时器 看门狗 计时重置

kai.zhang · June 13, 2017 · Last by gihnius replied at June 17, 2017 · 2651 hits

各位大牛,我现在有这样一个问题!

使用 ruby,设计一个 30 秒的计时器,如果时间到达 30 秒,可去执行一个自定义函数。但是计时器在 0 到 30 秒计时的过程中,可能每过 5 秒就会接收到一个消息,如果计时器接收到这个消息,便把现在记录的时间重置为 0,重新开始计时。这个循环直到时间到达 30 秒执行指定函数后退出,否则一直会被重置计时。

请问 ruby 有没有实现这种的 gem 包,或者有相应资料。谢谢!

另外我说的这个问题会在 Rails 中使用到。

准确的说是计时器在 0 到 30 秒计时的过程中,任意时间,都可能会接收到一个消息,如果计时器接收到这个消息,便把现在的时间重置为 0,重新开始计时。循环直到时间到达 30 秒时,执行指定函数退出。

定时器英文就是 scheduler 了,一般异步任务队列可以解决,通过 ActiveJob perform_later 来解决,后端接 sidekiq,你的触发器的逻辑要自己去处理

当然 既然知道术语 scheduler 了,那也可以利用这个关键词去寻找适合的 gem

XxxJob.set(wait_until: xx).perform_later(xx) 收到消息以后,把这个队列任务删掉,然后和上面一样再重新创建一条定时任务

貌似这个概念叫【函数节流】?

Reply to jasl

使用 ActiveJob,后端接 sidekiq,还要安装使用 redis,这个我之前试过,可以异步执行,应该是一种解决办法。

eventmacine?

你这场景用一般的 scheduler(sidekiq, activejob) 就行了吧,能不加 watchdog 就不加。

办法是在你要延迟处理的对象上做标志,等到 scheduler 运行到时判断这个标志忽略过去就行。

You need to Sign in before reply, if you don't have an account, please Sign up first.