CGI-2.89 > CGI::Fast

名前

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開発者キットの全てが以下のURLにあります:

  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に 追加しなければなりません:

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

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

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

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

外部のFASTCGIサーバーの呼び出し

FastCGIは、FastCGIスクリプトがWebサーバーの外部、おそらくはリモートのマシンで 実行することを可能にする、TCP/IP転送機構をサポートしてます。Webサーバーが 外部のFastCGIサーバーに接続するよう設定するためには、以下のものをsrm.confに 追加します:

    FastCgiExternalServer /usr/etc/httpd/fcgi-bin/file_upload.fcgi -host sputnik:8888

2つの環境変数が、CGI::Fastが外部のFastCGIサーバーとして使われることを 許しながら、CGI::Fastがどのように作成されるかに影響を与えます。( さらなる詳細についてはFCGI::OpenSocketのためのFCGIのドキュメントを ご覧ください。)

FCGI_SOCKET_PATH

外部FastCGIスクリプトが、Webサーバーからやってくる接続をリスンするために バインドする、ソケットのアドレス(TCP/IP)あるいはパス(UNIXドメイン)

FCGI_LISTEN_QUEUE

接続を保留する待ち行列の最大長

例:

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

警告

私はこれをあまりたくさんテストしていません。

作者情報(=AUTHOR INFORMATION)

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

翻訳者

川合孝典(GCD00051@nifty.ne.jp)