スタンドアロンWebサーバ書くのにPOE::Component::Server::HTTPはかなりお手軽ですね。エラー処理とかいろいろはしょると以下のコードで、Webサーバが走ります。
use strict; use warnings; use POE qw( Component::Server::HTTP Sugar::Args ); my $httpd_aliases = POE::Component::Server::HTTP->new( Port => 8080, ContentHandler => { '/' => \&httpd_index, } ); sub httpd_index { my ($request, $response) = @_; $response->code(RC_OK); $response->content('Hello, POE!'); return RC_OK; } POE::Kernel->run; exit 0;
$requestと$responseはそれぞれHTTP::RequestとHTTP::Responseのオブジェクトになっているので、その部分を自分でいじれば良いな。
Ctrl+Cで落ちないので、killしてください。きちんと終了するには以下のコードをPOE::Kernel->runするまえに
POE::Session->create( inline_states => { _start => \&_start, shutdown => \&shutdown, }, ); sub _start { my $poe = sweet_args; $poe->kernel->sig( INT => 'shutdown' ); } sub shutdown { my $poe = sweet_args; $poe->kernel->call( $httpd_aliases->{httpd}, 'shutdown'); }
と言う感じで。
これだけで、きちんと動く高速なWebサーバが使えるのは便利だわー。これ以外にもすてきなスタンドアロンWebサーバ向けモジュールってあるのかしら。
POEプログラミングはまだなかなか慣れないけど、コードをいろいろ書いているうちにPOE流がわかりつつあるところ。POE::SessionがPOE::Kernelの中でどう動いているのかをきちんと把握しときたいとこだわ。