是否可以从简单的Ruby / Rack应用程序发送流式响应?

时间:2011-12-12 02:52:50

标签: ruby rack

我正在构建一个Ruby Web服务,它接受POST或PUT请求,告诉它做一些工作。这项工作涉及移动一些大文件 - 有时通过网络 - 所以这些请求可能需要一段时间。我正在构建一个单独的服务 - 在Python,或Node,或任何其他 - 处理调度和监视对Ruby服务的请求。

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

使用标准Rack应用程序可以实现吗?仅供我使用Camping框架它与Sinatra等有所不同。通常您只需从方法返回即可发送响应:

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

我知道我的进程是由Rack / web服务器界面管理的,所以我不知道在Rack中是否可以发送流式响应,而无需深入研究框架的工作方式并与Rack进行对话。有人可以给我一些指示吗?

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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