【发布时间】:2014-11-27 02:07:46
【问题描述】:
我有一个可用的 Mojolicious 服务器,它通过 HTML5 EventSource 提供数据。 效果很好,但我希望数据以 gzip 格式编码。
通过写入发送压缩数据会在 Chrome 开发工具中产生 CONTENT_DECODING_FAILED。 将建议的方法与“hook after_render”一起使用似乎不适用于事件流。 如何使用 EventSource 和 Mojolicious 发送 gzip 编码数据?
use Mojolicious::Lite;
use Mojo::Redis;
use IO::Compress::Gzip 'gzip';
my $redis = Mojo::Redis->new;
get 'radar_events' => sub {
my $c = shift;
$c->render_later;
$c->inactivity_timeout(300);
$c->res->headers->content_type('text/event-stream');
$c->res->headers->cache_control('no_cache');
$c->res->headers->content_encoding('gzip');
$c->res->headers->header( 'Access-Control-Allow-Origin' => '*' );
my $id = Mojo::IOLoop->recurring(
5 => sub {
$c->delay(
sub {
my $delay = shift;
$redis->get( 'radar', $delay->begin );
},
sub {
my ( $delay, $jstring ) = @_;
my $buf = "event:rupdate\ndata: ".$jstring."\n\n";
gzip \$jstring => \my $buf;
$c->write($buf);
}
);
}
);
$c->on( finish => sub { Mojo::IOLoop->remove($id) } );
};
app->start;
【问题讨论】:
标签: perl gzip mojolicious