6. 何が作れるの? レスポンスハンドラ(PerlResponseHandler) パラメータに応じたレスポンス (通常のWebアプリケーション) プロトコルハンドラ カスタム認証ハンドラ(PerlAuthzHandler) カスタムログ出力(PerlLogHandler) Input/Output Filterハンドラ 全てのリクエストに対し一定の処理をかける(PerlInputFilterHandler) 全てのレスポンスに対し事後的に一定の処理をかける(PerlOutputFilterHandler) 6 Copyright 2009 Fractalist inc. All rights reserved.
7. ソースはどんな感じ? #file:/somewhere/perl/lib/MyApp/Apache2/HelloWorld.pm #---------------------- package MyApp::Apache2::HelloWorld; use strict; use warnings; use Apache2::RequestRec (); use Apache2::RequestIO (); # 定数の宣言 use Apache2::Const -compile => qw(OK); # ハンドラメソッドの宣言 # これだけ! sub handler { my $r = shift; # Apache2::RequestRecObjectが引数に入ってくる $r->content_type(‘text/plain’); # HTTPヘッダの格納 $r->print( “Hello World!
” ); # 出力結果の格納 return Apache2::Const::OK; } 1; 7 Copyright 2009 Fractalist inc. All rights reserved. クラスメソッドとして定義することもできる 継承などが利用できるので開発効率大 開発用のオートリロードも可能
8. 特徴1:高速+軽快! Apache起動時に実行イメージをロードする PHPでは基本的にインタプリタのみロード 必要最小限のモジュールのみ使用するようにできるので、実行イメージが小さくなる 必ずしも大きなWAFに頼る必要はない Ruby on RailsやCakePHPでは原則オールインワンで利用せざるを得ない ハンドラだけ定義できるので場合によっては限定的な影響範囲にのみ適用できる 8 Copyright 2009 Fractalist inc. All rights reserved.
9. 特徴2:高い開発効率 C言語でなくPerlで記述できる リソースの垣根が低い 枯れた技術/モジュール等資産の再活用 多彩なCPANモジュールを利用できる CGI URI Encode Log::Log4perl HTTP::MobileAgent etc… ミドルウェアとの連携も容易 memcached DBI 9 Copyright 2009 Fractalist inc. All rights reserved.
10. 特徴3:変数ライフサイクル Apache親プロセスと子プロセスでファイルロードタイミングなどを意識できる 10 Copyright 2009 Fractalist inc. All rights reserved. Apache 親プロセス リクエスト Apache 子プロセス fork(2) レスポンス Apache 子プロセス Apache 子プロセス Apache 子プロセス Apache 子プロセス Apacheのpreforkモデルのイメージ
11. まとめ 利用シチュエーション 広告配信 カスタムログ収集 その他小さいアプリケーションを短期間で開発したい場合 まとめ 11 Copyright 2009 Fractalist inc. All rights reserved. Webアプリケーションの開発要件に応じて 様々な形態から採用検討することが重要