HTTP-Engine-0.03005 - Web Server Gateway Interface and HTTP Server Engine Drivers - metacpan.org
- local::lib で $HOME/perl5 以下をいろいろセットアップしてからインストール。一発で依存含めて全部入った。
- HTTP::Engine, HTTP::Engine::Interface::ServerSimple の POD を読む
- SYNOPSIS 通りに書いてみる→エラー→タイプミスしてた→書き直し→動いた!
- HTTP::Engine::Request の POD も読む→ $req->param('key') とかできる
- HTTP::Engine::Middleware もインストールする
- HTTP::Engine::Middleware の POD も読む→なんとなく役割がわかったような、でもあやふやなような
- SYNOPSIS を真似て書いてみる→足りないモジュール入れたり→ request_handler => $mw->handler(\&handler) のあたりがわからない、自分で handler() を実装して HTTP::Engine::Response->new( body => 'dynamic daikuma' ) とかすると当たり前っぽいけどどの URL へリクエストしてもそれしか返らない、ううむ
- なんか根本的に勘違いしてるんだろうな、と思って色々ぐぐっている
- Hatter のソース読んで、勘違いしてたところがなんとなくわかった。最低限一つの handler は実装する必要があって、 Middleware::Static などを install すると、特定のパターンの場合にそっちに委譲できるみたいな感じなのかな。
- お、できた。記念に貼っとこう。
#!/usr/local/bin/perl use strict; use warnings; use HTTP::Engine; use HTTP::Engine::Middleware; use File::Spec; use FindBin; my $mw = HTTP::Engine::Middleware->new; $mw->install('HTTP::Engine::Middleware::Static' => { regexp => qr/^.*(\.txt|\.html)$/, docroot => File::Spec->catdir($FindBin::Bin, qw(public_html)), }); my $engine = HTTP::Engine->new( interface => { module => 'ServerSimple', args => { host => 'localhost', port => '1978', }, request_handler => $mw->handler(\&handler), }, ); $engine->run; sub handler { my $req = shift; return HTTP::Engine::Response->new( body => '' ); }
-bash-3.00$ tree . |-- http-engine-server-simple.pl |-- middleware-static.pl `-- public_html |-- bob.html `-- pen.txt 1 directory, 4 files