| Win32 FAQ |
PerlIS - Perl for ISAPI
Perl for ISAPIについて
Perl for ISAPIの情報についは、 perlwin32faq6 manpage及び perlwin32faq7 manpage にも記載されています。
ISAPI(Internet Server Application Programming Interface)とは、Webサーバに対するエクステンションを書くためのAPIです。 元々はプロセスソフトウェアが開発したものですが、標準的なサーバAPIとしてマイクロソフト社に採用されました。 これは、Webサーバに対するエクステンションを書くための 標準的なプロセス間プロトコルであるCGI(コモンゲートウェイインターフェース)を 補完あるいは置換するものです。
CGIに対するISAPIの主な利点は、 エクステンションコンポーネントとの通信に、CGIのように環境変数や標準I/Oを使うのではなく、DLL(ダイナミックリンクライブラリ)関数をコールするということです。 Win32プラットホームでは新プロセスを起動する際は多大なオーバヘッドが かかりますが、DLLコールは新しいプロセスを必要としないので、実行時間が短縮されます。
元々はMicrosoft Internet Information Server用に開発されましたが、現在では 多くのWindows NTをホストとするWebサーバでISAPIがサポートされています。 いくつかは Perl for Win32をサポートしているHTTPサーバに記載されています。 自分のサーバが見あたらなかった場合、サーバのドキュメントを確認してみて ください。
Perl for ISAPIとは、Win32プラットホーム上でPerlスクリプトを実行するISAPIエクステンションです。
Perl for ISAPIは、主にWorld Wide Webサイト上のダイナミックコンテンツを 制作するために使用されます。 PerlISのもとで動くPerlスクリプトを書くのはCGI(Common Gateway Interface)用 スクリプトを書くのと大差ありません。
Perl for ISAPIは、一般の用途には向きません。 一般のプログラミングには、perlインタープリタ (perl.exe)がいいでしょう。
PerlISに関してはPerl for ISAPIを見てください。
PerlISとはPerl for ISAPIのDLLの名前なのです。
Perl for ISAPIは、Perl for Win32ディストリビューションに含まれており、Perl for Win32のインストール時にインストールするかどうか選択することができます。
Perl for Win32は、http://www.ActiveState.com や各CPANサイトで入手できます。
簡単に言えば、早いからです。詳しくは、少々技術的な内容になりますが、以下の通りです。:
perl.exeに対するPerlISの主な利点は、PerlISはWeb サーバのプロセス空間でDLLとして実行されるということです。 Win32プラットホームは、プロセス毎に保護されたメモリ空間を設定するので、新しいプロセスやプログラムを開始する際にたくさんの オーバヘッドがかかります。 perl.exeのようなインタープリタにスクリプトを渡すには、 スクリプト毎に新しいプロセスを開始する必要があるのです。 これだと、システム資源に関して高いコストがかかることになります。
一方、DLLは自分自身のプロセス空間を必要としません。 それは自分をcallしたプロセスの空間を使用するのです。 起動するためのオーバヘッドもそれほど必要ありませんし、一旦ロードされると callしたプロセスが終了するまでロードされたままとなります。 ですから、PerlISはperl.exeよりもずっと短いターンアラウンド時間で Perlスクリプトを実行するのです。
PerlISアプリケーションを書く際は十分な注意が必要です。というのは、 CGIでWebサーバをクラッシュさせるのは結構大変ですが、PerlIS.DLLはサーバのプロセス空間で動くので、Webサーバがプログラミングエラーで引き起こされるクラッシュやハングの影響を受けやすくなっているからです。
Perl for ISAPIのソースは公開されていません。
この FAQ は、元々Evangelo Prodromou evangelo@endcontsw.comが作成し、保守していたものです。 現在、この文書は、O'Reilly社のBrian Jepson及びActiveState社のDavid GroveとDavid Dmytryshynが改訂・更新しています。
このFAQはパブリックドメインですが、使用する場合はオリジナルの作者について明示してください。
| Win32 FAQ |