QRコードを表示するapp.psgi

QRコードを表示するだけの簡単なお仕事を大量にさばきたいって言われたので書いてみた。

use Imager::QRCode;
use Plack::Request;

my $qrcode = Imager::QRCode->new(
    size          => 2,
    margin        => 2,
    version       => 1,
    level         => 'M',
    casesensitive => 1,
    lightcolor    => Imager::Color->new(255, 255, 255),
    darkcolor     => Imager::Color->new(0, 0, 0),
);

my $app = sub {
    my $req = Plack::Request->new(shift);

    my $url = $req->param('url')
        or
        return [400, ['Content-Type' => 'texxt/plain'], ['url is required']];

    my $img = $qrcode->plot($url);
    $img->write(data => \my $data, type => 'gif') or die $img->errstr;
    return [200, ['Content-Type' => 'image/gif'], [$data]];
};

これをStarmanで走らせて

starman -a app.psgi

ab -c 10 -n 100してみたら、うちのヘボサーバーでも247.78 [#/sec]くらいでた。

そういえば.cgiCGIスクリプトってよく言うけど.psgiPSGIスクリプトって呼べばいいのかな。PSGIアプリケーションでいいのか。