Amon2にStreaming機能をつけようとした話
PSGIのStreamingなやり方がわかったので、一番触ってたAmon2でもできないかと思ってforkして書いてpull requestまでしてみた。
イメージとしては、
any '/' => sub { my ($c) = @_; $c->render('index.tt'); };
といういつものスタイルを壊さないような感じを出したかった。
ので、こんな感じで書けるようにした。
any '/streaming' => sub { my ($c) = @_; $c->streaming(sub { my ($writer) = @_; $writer->write("<html>\n"); for my $i (1..5) { $writer->write("<div>$i</div>\n"); sleep 1; } $writer->write("</html>"); $writer->close; }); };
streamingメソッドにコールバックのサブルーチンを引き渡して、中で出力用のハンドルをもらえる。
もらった$writerで適宜出力する。
で、pull requestしてみたらmergeしてもらえてた。
https://github.com/tokuhirom/Amon
thanks!
のはいいのだけれど、
いまこのままだとHTTPヘッダのContent-Typeがhtmlでしか固定で出せない…。
AFTER_DISPATHでやりくりもできそうだけど、なんかスマートでもない気がする…。
…というか僕はHTMLちょっとずつ出したかったからこういうのを書いてみたんだけど、
本来どういう使い方がいいのだろうか。わたし、気になります。