从Rails 3.2长时间轮询

时间:2012-04-24 04:35:12

标签: heroku ruby-on-rails-3.2 long-polling cedar

我有一个需要花费大量时间来处理的载波上传,但需要在用户继续浏览器中的下一个操作之前完成。我在前端使用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似乎正在对响应进行批处理,而不是将它们发送回客户端。

任何人都有任何想法如何让这个工作?

0 个答案:

没有答案