QA@IT

PassengerはHTTPストリーミングに対応しているでしょうか?

2428 PV

AsciiCastsに、Rails 3.1以降のHTTPストリーミング機能についての解説があります。

これを参考にRailsのドキュメントを見てみると、UnicornはHTTPストリーミング対応であると書かれています。
しかし、Passengerについては「To be described.」のままになっています。

結局のところ、PassengerはHTTPストリーミングに対応しているのでしょうか。
「To be described」ということは、対応しているが設定が必要ということでしょうか?

回答

「PassengerBufferResponse off」という設定をすれば、ストリーミングが可能になりそうです。

まとめておくと、

on

  • レスポンス全体をメモリに読み込んでから、クライアントにデータを送り始める(=ストリーミングができない)
  • レスポンスが巨大な場合にメモリを圧迫する
  • その代わり、遅いクライアントがいても大丈夫
  • デフォルトはこっち

off

  • ストリーミングができる
  • レスポンスが巨大な場合にもメモリを圧迫しない(ことが可能、実装次第ですが)
  • 読み込みが遅いクライアントがいた場合に、Passengerの1インスタンスが占有されてしまう
編集 履歴 (0)
  • 結局現状のpassengerではstreamingは微妙で、3.2をマテって事なんでしょうね。 http://blog.phusion.nl/2012/04/13/a-sneak-preview-of-phusion-passenger-3-2/ -
  • 情報ありがとうございます!
    「real-time disk-buffered response forwarding」ってことで、特に設定をいじらなくても

    * 読み込みが遅いクライアントに対しては、レスポンスデータをメモリ(orディスク)にバッファする
    * ただし、その場合でもレスポンスの送信はリアルタイムに行う

    っていう上のon/offのいいとこどりのような動作になるわけですね。
    -
ウォッチ

この質問への回答やコメントをメールでお知らせします。