Ruby on rails 等待HTTP请求在rails控制器中完成

Ruby on rails 等待HTTP请求在rails控制器中完成,ruby-on-rails,http,ruby-on-rails-4,faye,Ruby On Rails,Http,Ruby On Rails 4,Faye,我有一个场景,我的rails控制器操作必须向后端业务逻辑服务器发出API请求,后端业务逻辑服务器进行大量计算并返回结果 我想向用户显示一个加载页面,使用Faye或任何其他选项使调用异步,并在调用完成时重定向用户 但即使我使调用异步,HTTP请求也需要等待服务器在处理后返回数据,这大约需要20秒 我想知道在rails中进行此类调用的最佳方式是什么。我曾经遇到过类似的情况,下面是我所走的路线: 当控制器动作被触发时 A.我使用worker(我使用sidekiq)向API发出了一个“异步”请求 B在模

我有一个场景,我的rails控制器操作必须向后端业务逻辑服务器发出API请求,后端业务逻辑服务器进行大量计算并返回结果

我想向用户显示一个加载页面,使用Faye或任何其他选项使调用异步,并在调用完成时重定向用户

但即使我使调用异步,HTTP请求也需要等待服务器在处理后返回数据,这大约需要20秒


我想知道在rails中进行此类调用的最佳方式是什么。

我曾经遇到过类似的情况,下面是我所走的路线:

  • 当控制器动作被触发时 A.我使用worker(我使用sidekiq)向API发出了一个“异步”请求 B在模型顶部加载“AJAX”微调器gif

  • 处理API请求的工作线程在另一个同步线程上运行,并等待API的结果

  • 处理完成后,工作人员通过“Faye”发出通知,删除模式并填充数据


  • 返回状态为“已接受”的HTTP响应(对于需要长时间处理的请求),并开始发出AJAX请求(到URL,例如/jobs/1),以检查后台作业的状态。作业完成后,更新其状态,以便Javascript(AJAX)能够处理该后台作业的结果。

    因此,基本上,您是说对进程进行排队。但是排队有延迟,我们不能让进程立即启动,而在后台运行吗。?我知道这取决于进程线程。只是想知道是否有更好的方法。因为,当用户有多个请求时,我不能让他们等待。@SriVishnuTotakura您可以使用类似sidekiq的方法,并为正在进行这些计算的队列赋予最高优先级。此外,您还可以更改sidekiq的轮询间隔(在redis中每个队列检查新作业之间的时间),以便您的作业几乎立即启动。但另一个疑问是,我必须调用的另一台服务器处理数据可能需要20秒或更长时间才能响应。后台工作进程中的HTTP请求是否会持续那么长时间。?这会不会在应用程序中引起我应该注意的任何问题…?您如何发送请求?您是否使用内置的“Net::HTTP”方法请求并等待响应?如果是这样的话,据我所知,线程将在继续之前等待响应。一个问题,如果处理得当的话,是非常琐碎的,那就是你通过faye在推动什么?如果您正在重新填充一个表,而用户不在该页上,该怎么办?