読者です 読者をやめる 読者になる 読者になる

Perl日記

PerlとかRubyとかPHPとかPythonとか

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ちょっとずつ出したかったからこういうのを書いてみたんだけど、
本来どういう使い方がいいのだろうか。わたし、気になります。