如何从后台进程获取结果

时间:2010-03-01 19:56:30

标签: ruby-on-rails xml ruby backgroundworker

我正在设计一个Ruby on Rails应用程序,该应用程序请求XML提要,读取它们,并将它们解析为要在视图中使用的对象。由于XML feed的请求及其后续接收可能需要几秒钟才能完成,我需要一种方法从我的前线应用程序层卸载这些任务。我不希望我的应用程序服务器花费超过几百毫秒来处理请求。目前,应用程序服务进程等待返回XML提要数据,以便他们可以解析它并完成返回用户的请求。我知道DelayedJobs,但是考虑到此操作的结果将实时返回给用户,我不确定如何将其卸载到后台任务并接收结果。

如果我将此任务卸载到后台任务,结果如何返回给加载页面的用户?

4 个答案:

答案 0 :(得分:1)

这类事情的一个常见模型是使用您首选的后台作业库(提及DelayedJob,这似乎是一个流行的)来从请求/响应周期卸载任务,然后设置AJAX轮询客户端在结果可用后更新页面。

答案 1 :(得分:0)

如果您对服务器上运行的Perl代码持开放态度,我将解除一段LiveJournal基础架构:GearmanTheSchwartz

听起来你想要Gearman - 它有Ruby客户端绑定。

(见 http://www.livejournal.com/doc/server/lj.install.workers_setup_install.html

答案 2 :(得分:0)

您可以让主要返回页面在处理XML检索的第二层服务器上触发AJAX请求,并返回包含该信息的页面部分的HTML。这样你就不会运行任何异步作业(从服务器的角度来看),并且在AJAX请求进入之前检索不会开始,这将减少你在机器人身上浪费的带宽。

这是AJAX的标准用法,因此我不确定我是否遗漏了您的问题,因为它不适合您。

答案 3 :(得分:0)

最常见的方法是在这里使用AJAX和DelayedJob,但它只是一个可用性改进 - 而不是用户等待5秒加载页面,他们得到一个空的或半空的页面与旋转器5秒。 (在我看来)真正改善用户体验的唯一方法是定期加载和处理这些xml提要并向用户显示缓存的结果。