3

私は PSGI/Plack と、ストリーミング/遅延応答を行う方法を調査しています。すでにグーグルで検索していますが、その方法の例はほとんどまたはまったく見つかりません。以下は、metacpan の PSGI::FAQ から集めた小さな断片です。たとえば、以下の長時間実行されているsimulateLongProcess() メソッドの応答をストリーミングしたい場合、PSGI/Plack を使用してどのように実装すればよいでしょうか? また、可能であれば、このトピックに関連する例へのリンクを共有してください。ありがとう!

# Implementing delayed streaming response
use strict;
use warnings 'all';
no warnings 'uninitialized';
use Plack::Request;
sub say { print @_, "\n" }

my $app = sub {
  my $env = shift;
  unless ($env->{'psgi.streaming'}) {
    die "This application needs psgi.streaming support";
  }
  return sub {
    my $respond = shift;
    my $writer = $respond->([200, ['Content-Type', 'text/plain']]);
    wait_for_new_message(sub {
      my $message = shift;
      if ($message) {
        $writer->write($message->to_json);
      } else {
        $writer->close;
      }
    });
  };
};#end app

sub simulateLongProcess {#Params: none; #Return: void;
  for ( my $i=0; $i <= 5; $i++ ) {
    say $i;
    sleep( 3 );
  }#end for
}#end sub
4

0 に答える 0