CGI::Fastモジュール

by Hippo2000(2000/8/9)

CGI::Fastモジュールなのです。

原本の著作権はLincoln D. Stein.氏がお持ちです。詳しくは著作権情報をご覧ください。

内容等が間違っていたら修正します。ご連絡ください。


目次


名前

CGI::Fast - Fast CGI のためのCGIインターフェース


概要

    use CGI::Fast qw(:standard);
    $COUNTER = 0;
    while (new CGI::Fast) {
        print header;
        print start_html("Fast CGI Rocks");
        print
            h1("Fast CGI Rocks"),
            "Invocation number ",b($COUNTER++),
            " PID ",b($$),".",
            hr;
        print end_html;
    }

説明

CGI::Fast はCGI.pmによって作成されるCGIオブジェクトののサブクラスです。Open Market FastCGI標準でうまく機能するように特殊化されています。それはCGIスクリプトを永続的に実行しているサーバプロセスに変換することによって、そのスピードを大きく向上させます。大きなモジュールをロードしたり、永続的なデータベース接続を開くような時間のかかる初期化を行うプロセスのパフォーマンスは大きく向上するでしょう。


パズルの他のピース

CGI::Fastを使うために、FastCGIが使えるWebサーバが必要です。 Open MarketのサーバはFastCGI-savvyです。NCSA httpd 1.5とApacheのためのフリーで再配布できるFastCGIモジュールもあります。Microsoft Internet Information ServerとNetscape Communications ServerのためのFastCGIを可能にするモジュールはアナウンスされています。

さらにFastCGI I/OラブラリとリンクされたPerlインタープリタのバージョンが必要になります。DEC Alpha, HP-UX そしてSPARC/Solarisを含めて多くのプラットフォームのためにコンパイル済みのバイナリが利用できます。あるいはFastCGI開発者キットで提供されるパッチをあてたソースからPerlを再作成することができます。FastCGI Perlインタープリタはおかしな結果なしに、通常のPerlの場所で使うことが出来ます。

Apache と NCSA httpdのためのFastCGIモジュール、コンパイル済みのPerlインタープリタ、FastCGI開発者キットのすべてを見つけることが出来ます:

  http://www.fastcgi.com/

FASTCGI PERLスクリプトの書き方

FastCGIスクリプトは永続的です:サーバが初期化されると、1つまたは複数のスクリプトのコピーが起動され、サーバが終了するか、自然死するまで残ります。それが必要とする1回の初期化を何であれ行った後、スクリプトは接続が来るのを待ち、リクエストを処理し、さらに待つというループに入ります。

典型的なFastCGIスクリプトは以下のようになります:

    #!/usr/local/bin/perl    # FastCGIバージョンのPerlでなければなりません!
    use CGI::Fast;
    &do_some_initialization();
    while ($q = new CGI::Fast) {
        &process_request($q);
    }

新しいリクエストがあるたび、CGI::FastはCGIオブジェクトをループに返します。残りの時間、スクリプトはnew()の呼び出しで待っています。サーバがスクリプトに終了することを要求するとき、new()はundefを返します。もちろん、そうしたければもっと早く終了することも出来ます。スクリプトの新しいバージョンは、その場所をとるために再び起動されます(長時間実行するスクリプトでのPerlメモリ・リークをさけるために、これが必要かもしれません)。

CGI.pmのデフォルトのCGIオブジェクトも同様に機能します。(訳者注:関数指向のことを指している)単にループを、このように変更してください:

    while (new CGI::Fast) {
        &process_request;
    }

header()、start_form()などは、すべての現在のリクエストに影響を与えます。


FASTCGIのインストール

完全な詳細はFastCGI開発者キットドキュメントをご覧下さい。Appacheサーバでは、以下の行をsrm.confに追加しなければいけません:

    AddType application/x-httpd-fcgi .fcgi

FastCGI スクリプトは拡張子 .fcgiで終わらなければなりません。インストールする各スクリプトでは、以下のようなものをsrm.confに追加しなければなりません:

   AppClass /usr/etc/httpd/fcgi-bin/file_upload.fcgi -processes 2

これは起動時にfile_upload.fcgi の2つのコピーを起動するようにApacheに命令しています。


CGIスクリプトとしてFASTCGIスクリプトを使う

FastCGIスクリプトとして正常に機能するすべてのスクリプトは普通のCGIスクリプトとしてインストールされたときにも正常に機能します。しかしながら、パフォーマンス的な利点は見られないでしょう。


警告

これはあまりテストしていません。


作者情報

Copyright 1996-1998, Lincoln D. Stein. All rights reserved.

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

 

バグレポートとコメントはlstein@cshl.org に送ってください。


バグ

このセクションは最初はブランクのままです。

(訳者注:どうもデフォルトのままのようです)


参考資料

CGI::Carp, CGI


ホーム Perlの小技

ご意見、ご質問はこちらの掲示板で受け付けています。
またメールは河馬屋(Nifty)にお願いします。