【发布时间】:2011-08-17 02:13:15
【问题描述】:
当后台作业开始时,它被发送到一个工作人员处理它的队列的后面;一个任务清除,另一个开始。我想我做对了,只是在某些情况下我不了解它的实际方面。当然,如果您是一家公司,使用延迟工作每周发送 15,000 份时事通讯是非常合理的。但是,如果您有一个甚至 100 个用户的应用程序,其中某些任务的时间足够长,需要后台工作(例如发送/获取可能需要一分钟的电子邮件),那么每个用户将不得不排队等待另一个用户被清除(在如果只有一个工人)。
这是我不确定我是否正确的部分。我说的是相同的工作,但每个用户都是单独的。这算作每个用户的工作吗?如果我有 100 个用户,我是否需要为每个人的流程保留 100 个工人才能不被束缚?
我已经尝试使用delayed_job 来模拟这一点,实际上,当我使用不同的帐户登录时,我必须等到另一个用户的电子邮件被发送,直到我的电子邮件被发送。虽然该插件快速且易于使用,但我认为这不是正确的方法。
我也尝试过使用 Ajax,但由于它是一个 HTTP 请求,它会将浏览器捆绑在加载模式中,直到它从服务器获得响应(即使是 async: true)。不确定我是否太快排除了这个,但我有点在寻找更优雅的服务器解决方案。
有没有办法实现这样的后台工作? (我听说过不同的,主要是商业解决方案承诺很少的等待时间,但我有兴趣完全消除用户之间的队列)。如果没有,是否有一种方法可以在不等待响应的情况下发出 ajax 请求?我意识到我的问题都截然不同,但似乎都是解决这个问题的合适方法。
【问题讨论】:
标签: ruby-on-rails ajax background queue delayed-job