【问题标题】:Is it possible to sending a streaming response from a simple Ruby / Rack app?是否可以从简单的 Ruby / Rack 应用程序发送流式响应?
【发布时间】:2011-12-12 02:52:49
【问题描述】:

我正在构建一个 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 服务器的首选解决方案;)

【问题讨论】:

    标签: ruby rack


    【解决方案1】:

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

    【讨论】:

    • 谢谢。不过,我想我将不得不停止尝试将这类东西放入基于 Rack 的 Web 框架中。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-10
      • 1970-01-01
      • 2017-09-13
      • 2011-04-09
      • 1970-01-01
      • 1970-01-01
      • 2013-01-18
      • 2016-10-29
      相关资源
      最近更新 更多