3

我正在探索 PSGI/Plack 以及如何进行流式处理/延迟响应。已经用谷歌搜索了,但几乎没有找到如何做到这一点的例子。以下是我从 metacpan 上的 PSGI::FAQ 中收集到的一些点点滴滴。例如,如果我想在下面对我长时间运行的模拟LongProcess() 方法进行流式响应,我将如何使用 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