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

kai.zhang · 发布于 2017年06月13日 · 最后由 gihnius 回复于 2017年06月17日 · 658 次阅读
96

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

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

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

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

共收到 8 条回复
96

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

1107

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

1107

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

27243

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

2099

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

96
1107jasl 回复

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

737f5d

eventmacine?

6061

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

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

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册