多次回复一个请求?

我的rails应用程序中的一个位置需要从外部服务器加载大量响应,目前看起来像这样:

  1. 用户向服务器发出AJAX请求。 显示“正在加载数据…”。
  2. 5-30秒后,rails app发送响应(假设数据尚未缓存)。

如果我能够在漫长的等待期间通知用户通知他们请求的进度,那将会好得多。 如:

  1. 用户提出请求(如前所述)。
  2. 显示消息“正在检索ABC”
  3. 显示消息“检索XYZ”
  4. 显示消息“处理数据”
  5. 完全响应正常。

我该怎么做呢? 我不认为向一个请求发回多个JavaScript响应是可能的,但不知道这样做的正确方法是什么!

这很棘手,但Rails支持流式传输请求的概念。 但是你可能需要在你的项目中做很多工作来完成这项工作。

Tenderlove(Aaron Patterson)发布了一个关于Streaming如何在Rails中工作的介绍 ,我相信在这个主题上有一个Railscast。

可能更简单的解决方案是将其拆分为多个请求。 所以主要请求(假设它是一个ajax请求)需要永远完成。 同时,您在不同的ajax请求上轮询状态,主操作使用它的进程更新数据库,以便其他请求可以检索该状态并发回相应的响应(当前主要请求在进程中)

因此,我将每个请求分配给请求ID,然后为这些请求及其状态设置数据库表(可能只有id:integer和status:string)

您在客户端上分配请求ID(使用一些随机数据来创建哈希或其他内容)并使用该Id启动长请求。 然后,客户端使用相同的id轮询另一个端点以获取状态。

同时,长时间运行的请求会更新Status表,其中包含给定的ID以及当前处理该请求的位置。