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