
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もちろん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