【问题标题】:Long processing; way to periodically send a 102 Processing response?长加工;定期发送 102 处理响应的方法?
【发布时间】:2025-12-07 05:30:01
【问题描述】:

我有一个 Rails 应用程序,它可能需要很长时间来准备对某些查询的响应。 (主要是延迟将数据集渲染为 JSON 或 YAML。)该应用程序位于我无法更改其配置的代理后面,结果这些长时间运行的查询往往会因超时而被代理终止。分块没有帮助,因为在渲染完全完成之前没有任何东西可以分块。

Rails 中是否有任何支持或已经存在的方式来设置异步重复任务,该任务可以发送回 102 Processing 响应以保持代理满意,直到准备好完整的响应?

真的宁愿不必实现分页语义。

我可以控制应用程序和客户端;这两个位都是我的代码。我没有控制代理,也没有应用程序的服务器。

非常欢迎任何建议!

【问题讨论】:

  • 你看过Rails Streaming吗?它不支持 JSON 或 XML,但可能会以某种方式启发您。除此之外,我认为这听起来像是一个可以从后台作业和缓存中受益的问题。
  • 不,我没有。我会看看那个。现在我正在使用EventMachine 和一些中间件。谢谢!

标签: ruby-on-rails ruby ruby-on-rails-4 proxy http-status-codes


【解决方案1】:

我可能会通过发布初始请求并让 rails 应用程序返回适当的 HTTP 状态代码来解决问题。然后我会在客户端有javascript,它会以合理的时间间隔轮询服务器以获取渲染状态。在处理完成之前,状态操作可能会返回 102 响应。然后,您可以使用 javascript 在页面中插入一个链接,用户可以单击该链接来下载完成的文件。

【讨论】:

    最近更新 更多