3

我有一个载波上传,需要花费大量时间来处理,但需要先完成,然后用户才能继续浏览器中的下一个操作。我在前端使用 Ajax 文件上传,因此应用程序 UI 会提供上传和处理的进度更新。这在我的开发环境中运行良好,因为我的开发服务器上的超时时间相对较长,但在 Heroku 上不太好,因为如果没有发送响应,Cedar 会在 30 秒后超时请求。我一直在尝试创建一个流式响应,它每隔几秒钟发送一个空间,直到通过创建一个响应对象来响应每个响应对象完成该过程:

class LongPoller
  def initialize(yield_every=2,task)
    @yield_every = yield_every
    @task = task
  end

  def each
    t = Thread.new(&@task)
    while t.alive?
      sleep @yield_every
      yield ' '
    end
    yield t.value.to_json
  end
end

但这并没有按预期工作,因为 Thin 似乎正在对响应进行批处理,而不是将它们发送回客户端。

任何人有任何想法我怎样才能让它工作?

4

0 回答 0