【问题标题】:Streaming in Apache & PassengerApache和Passenger中的流式传输
【发布时间】:2014-01-06 21:23:57
【问题描述】:

服务器版本:Apache/2.2.22 (Debian) 服务器搭建:2013年3月4日22:05:29

Phusion 乘客版本 4.0.21

Alias /tester /var/www/tester/public
<Location /tester>
   PassengerBaseURI /tester
   PassengerAppRoot /var/www/tester
</Location>
<Directory /var/www/tester>
   Allow from all
   Options -MultiViews
   #Enable response streaming
   PassengerBufferResponse off
</Directory>

你好, 我在使用 Apache 时遇到了“流式传输”的问题。如果我尝试运行以下代码,它会在发送到客户端之前完成处理;

#app.rb
require 'sinatra'

get '/' do
  stream do |out|
   out << "foo\n"
  sleep 10
   out << "bar\n"
 end
end

如果我从 CLI 运行启动瘦、sinatra 或乘客的应用程序,它将流式传输“foo”,然后稍后将流式传输“bar”。

知道为什么 Apache 会缓冲输出吗?

【问题讨论】:

    标签: apache passenger


    【解决方案1】:

    这是 Sinatra 中的一个限制。 Sinatra 流 API 仅支持基于 EventMachine 的服务器,而 Phusion Passenger 不支持。不要使用 Sinatra 流 API;相反,直接使用低级 Rack API 来实现流式传输。为此,您可以使用 the Rack socket hijacking API 通过套接字发送原始 HTTP 响应。

    【讨论】:

    • 感谢您的回复。在我进入那个兔子洞之前;我选择Passenger是因为它看起来像一个强大的服务器。我是 Ruby/Rails/Padrino 领域的新手,通常在 Windows 系统上工作。尝试在 IIS 上提供 Ruby,甚至在 Windows 上提供 Apache 都行不通。你能推荐一个更好的平台,我应该用它来构建一个服务器来简化事情吗?我将托管多个站点,并且大多数应用程序将基于 Padrino,但有些是 Rails。我也有点困惑,为什么在不通过 Apache 的情况下启动“乘客启动”来运行 Sinatra 应用程序会正确地提供页面?
    • Passenger 有 3 种完全独立的模式。它们是:Apache 模式、Nginx 模式和独立模式。 “乘客启动”仅运行独立模式。这在手册中有描述。
    猜你喜欢
    • 2015-12-12
    • 2011-12-13
    • 1970-01-01
    • 1970-01-01
    • 2022-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-30
    相关资源
    最近更新 更多