Apache和Apache中的流式传输乘客

时间:2014-01-06 00:31:17

标签: apache passenger

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

Phusion Passenger版本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会缓冲输出吗?

1 个答案:

答案 0 :(得分:0)

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