2011-12-12 63 views
0

我正在构建一个Ruby Web服务,它接受POST或PUT请求,告诉它做一些工作。这项工作涉及移动一些大文件 - 有时通过网络 - 所以这些请求可能需要一段时间。我正在构建一个单独的服务 - 以Python或节点或其他方式 - 处理调度&监视对Ruby服务的请求。是否可以从简单的Ruby/Rack应用程序发送流式响应?

我想发送关于Ruby应用程序行为的定期进度报告给调度器。也许每次离散操作成功完成时,例如移动一个文件,都会有一行。

这是可能的标准机架应用程序?仅供参考我使用的是露营框架这不是从西纳特拉不同等。通常你从刚才的方法返回发送响应:

def get 
    @status = 404 
    @headers['Content-Type'] = 'application/json' 
    return Yajl::Encoder.new.encode({error: 'forbidden', reason: 'I don't like you'}) 
end 

我知道我的过程是由机架/ Web服务器接口管理,所以我不知道是否可以在Rack中发送流式响应,而不必深入框架的工作方式并与Rack交谈。有人能给我一些指点吗?

是的,我知道,Ruby是不是流的HTTP服务器首选的解决方案;)

回答

1

听起来像是你需要一个chunked transfer。在Rack中也有一个Rack::Chunked中间件。

+0

谢谢。不过,我想我不得不停止尝试将这种东西装入基于Rack的Web框架中。 – Cera

1

Goliath框架处理流式响应。看看the content_stream的例子。没有理由为什么Ruby不是流式响应的首选解决方案,我们在PostRank中使用Goliath来处理一些相当重量级的流媒体服务。

相关问题