メメメモモ

プログラミング、筋トレ、ゲーム、etc

入門

PSGI


PSGIPerl Web Server Gateway Interfaceの略です。
PSGIは、WebアプリケーションイとWebサーバのインタフェースの仕様です。
どういう仕様かというと下記のようなものです。

my $app = sub {
    my $env = shift;
    return [
          200,
          [ 'Content-Type' => 'text/plain' ],
          [ "Hello World" ],
    ];
};


アプリケーションは、関数リファレンスで表現されています(my $app = sub {};)。
関数リファレンスでは、$envで環境変数を受け取り、配列のリファレンスを返します。
返される配列リファレンスには、
ステータスコード(200)、
ヘッダを格納する配列リファレンス([ 'Content-Type' => 'text/plain' ])、
ボディを格納する配列リファレンス([ "Hello World" ])
の3要素が含まれています。


CGIで動かすときは、

use Plack::Handler::CGI;

Plack::Handler::CGI->new->run($app);

と書けばよいです。


WebサーバのFCGIで動かすときは、

use Plack::Handler::FCGI;

my $server = Plack::Handler::FCGI->new(
      nproc  => $num_proc,
      listen => $listen,
      detach => 1,
);
$server->run($app);

と書けばよいです。


このように、インターフェースがPSGIに従っていれば、
実行環境によってアプリケーション側でプログラムを書き換える必要がなくなります。

Plack


PlackはPSGIのユーティリティです。

cpan Plack

で、インストールできます。


Plackには、スタンドアロンPSGIサーバが付属しています。

my $app = sub {
    my $env = shift;
    return [
          200,
          [ 'Content-Type' => 'text/plain' ],
          [ "Hello World" ],
    ];
};

を、「hello.psgi」という名前で保存し、下記のコマンドでサーバを起動します。

plackup hello.psgi


起動すると、ブラウザで「http://localhost:5000」にアクセスできます。
すると、「Hello World」と表示されます。