2009年09月08日

HTTP::Engineは、ちょっとした一枚スクリプトをサーバ化する便利な利用方法がありますが、それをPSGI実装向けにやってくれるアプリを昨日の帰りの電車の中で書きました。
http://github.com/yappo/App-Ksk/tree/master

使い方は簡単で、下記のようなスクリプトを書いて

package KskExample::Sample1;
use strict;
use warnings;

sub handler {
    my($class, $ksk, $req) = @_;

    my $body = qq{
<h1>Welcome To Ksk World.</h1>

you request uri is @{ [ $req->uri ] }.<br />
};
    my $res = $ksk->psgi_response_class->new({ status => 200, body => $body });
    $res->header( 'content-type' => 'text/html' );
    $res;
}

1;
$ ksk.pl scriptname.pl
の用に起動すると、サーバが上がるという物です。
デフォルトでPlack::Impl::ServerSimple で 8081 ポートで上がります。

もちろんPSGI実装は差し替え可能で次の用にするとAnyEventを使ってサーバを上げます。

package KskExample::AnyEvent;
use strict;
use warnings;

use Plack::Impl::AnyEvent;

sub ksk_init {
    +{
        psgi_setup => sub {
            my $handler = shift;

            my $ae1 = Plack::Impl::AnyEvent->new(port => 18081);
            $ae1->psgi_app($handler);
            $ae1->run;

            my $ae2 = Plack::Impl::AnyEvent->new(port => 18082);
            $ae2->psgi_app($handler);
            $ae2->run;
        },
        run_finalizer => sub {
            AnyEvent->condvar->recv;
        },
    };
}

sub handler {
    my($class, $ksk, $req) = @_;

    my $body = qq{
<h1>Welcome To Ksk World.</h1>

you request uri is @{ [ $req->uri ] }.<br />
};
    my $res = $ksk->psgi_response_class->new({ status => 200, body => $body });
    $res->header( 'content-type' => 'text/html' );
    $res;
}

1;
PSGI実装の入れ替え可能という事は別にPlackなんか使いたく無いぜ!派の人も psgi_setup をちゃんと書けば実装の選択は可能です。

ちなみにrequest classとしてPlack::Requestを、response は Plack::Response を使っていますが、これも差し替え可能で

Another::Request->new($env);
my $psgi_res = Another::Response->finalize;
という感じのインターフェィス要件を満たしてくれる、他のPSGI対応Req/Resクラスに差し替える事も可能です。

ついでにハンドラー周りのクラスも差し替えられるけどオマケです。

という事で快適なPSGIライフをお過ごしください。

Posted by Yappo at 2009年09月08日 11:29 | TrackBack | Perl
Comments
Post a comment









Remember personal info?






コメントを投稿する前に↓の場所にnospamと入力してください。