Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何从后台进程中获得结果_Ruby On Rails_Xml_Ruby_Backgroundworker - Fatal编程技术网

Ruby on rails 如何从后台进程中获得结果

Ruby on rails 如何从后台进程中获得结果,ruby-on-rails,xml,ruby,backgroundworker,Ruby On Rails,Xml,Ruby,Backgroundworker,我正在设计一个RubyonRails应用程序,它请求XML提要,读入它们,并将它们解析为要在视图中使用的对象。由于对XML提要的请求以及随后对它的接收可能需要几秒钟才能完成,因此我需要一种方法来从我的前端应用层卸载这些任务。我不希望我的应用程序服务器处理请求的时间超过几百毫秒。目前,服务于应用程序的进程坐在那里等待XML提要数据的返回,以便能够解析它并完成返回用户的请求。我知道DelayedJobs,但是鉴于此操作的结果将实时返回给用户,我不确定如何将其卸载到后台任务并接收结果 如果我将此任务卸

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


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

这种情况的一个常见模式是使用您首选的后台作业库(您提到的DelayedJob似乎是一个流行的库)从请求/响应周期中卸载任务,然后在客户端上设置AJAX轮询,以便在结果可用时使用结果更新页面

如果您对在服务器上运行的Perl代码持开放态度,我会提供一个LiveJournal基础设施:和

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

(见
)

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


这是AJAX的标准用法,因此我不确定您的问题中是否遗漏了一些不适合您的地方。

最常见的方法是在这里使用AJAX和DelayedJob,但这仅仅是一个可用性改进——用户没有等待5秒来加载页面,而是得到一个带有微调器的空或半空页面,持续5秒。在我看来,真正改善用户体验的唯一方法是定期加载和处理这些xml提要,并向用户显示缓存的结果。

这需要将xml提要的结果存储在表中。我不希望这样做,因为这会导致大量的读写操作。这与DelayedJob类似。虽然我的问题不是关于如何延迟任务,而是如果我延迟了任务,如何向用户提供结果。