我正在探索 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