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

时间:2014-02-26 13:47:57

标签: ruby-on-rails http ruby-on-rails-4 faye

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

我正在考虑向用户显示加载页面,并使用Faye或任何其他选项使调用异步,并在呼叫完成时重定向用户..

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

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

2 个答案:

答案 0 :(得分:2)

我遇到了类似的情况,下面是我采取的路线:

  1. 触发控制器操作时 一个。我使用工作人员向API发出'异步'请求(我使用了sidekiq) 湾在模态

  2. 上加载了一个'AJAX'微调器gif
  3. 处理API请求的worker在另一个同步的线程上运行,并等待API的结果

  4. 处理完成后,工作人员通过'Faye'触发通知,删除模态并填充数据。

答案 1 :(得分:0)

返回状态为202 Accepted的HTTP响应(对于需要花费很长时间才能处理的请求)并开始发出AJAX请求(到URL,例如/ jobs / 1)以检查后台作业的状态。一旦你的工作完成,更新它的状态,以便你的Javascript(AJAX)可以处理该后台工作的结果。