我正在构建一个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服务器的首选解决方案;)
答案 0 :(得分:1)
听起来你需要chunked transfer。在Rack中也有一个Rack::Chunked
中间件。
答案 1 :(得分:1)
Goliath框架处理流式响应。看看the content_stream示例。没有理由认为Ruby不是流媒体响应的首选解决方案,我们在PostRank中使用Goliath来处理一些非常重的流媒体服务。