home *** CD-ROM | disk | FTP | other *** search
-
- <HTML>
- <HEAD>
- <TITLE>CGI::Fast - CGI Interface for Fast CGI</TITLE>
- <LINK REL="stylesheet" HREF="../../Active.css" TYPE="text/css">
- <LINK REV="made" HREF="mailto:">
- </HEAD>
-
- <BODY>
- <TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0 WIDTH=100%>
- <TR><TD CLASS=block VALIGN=MIDDLE WIDTH=100% BGCOLOR="#cccccc">
- <STRONG><P CLASS=block> CGI::Fast - CGI Interface for Fast CGI</P></STRONG>
- </TD></TR>
- </TABLE>
-
- <A NAME="__index__"></A>
- <!-- INDEX BEGIN -->
-
- <UL>
-
- <LI><A HREF="#name">NAME</A></LI><LI><A HREF="#supportedplatforms">SUPPORTED PLATFORMS</A></LI>
-
- <LI><A HREF="#synopsis">SYNOPSIS</A></LI>
- <LI><A HREF="#description">DESCRIPTION</A></LI>
- <LI><A HREF="#other pieces of the puzzle">OTHER PIECES OF THE PUZZLE</A></LI>
- <LI><A HREF="#writing fastcgi perl scripts">WRITING FASTCGI PERL SCRIPTS</A></LI>
- <LI><A HREF="#installing fastcgi scripts">INSTALLING FASTCGI SCRIPTS</A></LI>
- <LI><A HREF="#using fastcgi scripts as cgi scripts">USING FASTCGI SCRIPTS AS CGI SCRIPTS</A></LI>
- <LI><A HREF="#caveats">CAVEATS</A></LI>
- <LI><A HREF="#author information">AUTHOR INFORMATION</A></LI>
- <LI><A HREF="#bugs">BUGS</A></LI>
- <LI><A HREF="#see also">SEE ALSO</A></LI>
- </UL>
- <!-- INDEX END -->
-
- <HR>
- <P>
- <H1><A NAME="name">NAME</A></H1>
- <P>CGI::Fast - CGI Interface for Fast CGI</P>
- <P>
- <HR>
- <H1><A NAME="supportedplatforms">SUPPORTED PLATFORMS</A></H1>
- <UL>
- <LI>Linux</LI>
- <LI>Solaris</LI>
- <LI>Windows</LI>
- </UL>
- <HR>
- <H1><A NAME="synopsis">SYNOPSIS</A></H1>
- <PRE>
- 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;
- }</PRE>
- <P>
- <HR>
- <H1><A NAME="description">DESCRIPTION</A></H1>
- <P>CGI::Fast is a subclass of the CGI object created by
- CGI.pm. It is specialized to work well with the Open Market
- FastCGI standard, which greatly speeds up CGI scripts by
- turning them into persistently running server processes. Scripts
- that perform time-consuming initialization processes, such as
- loading large modules or opening persistent database connections,
- will see large performance improvements.</P>
- <P>
- <HR>
- <H1><A NAME="other pieces of the puzzle">OTHER PIECES OF THE PUZZLE</A></H1>
- <P>In order to use CGI::Fast you'll need a FastCGI-enabled Web
- server. Open Market's server is FastCGI-savvy. There are also
- freely redistributable FastCGI modules for NCSA httpd 1.5 and Apache.
- FastCGI-enabling modules for Microsoft Internet Information Server and
- Netscape Communications Server have been announced.</P>
- <P>In addition, you'll need a version of the Perl interpreter that has
- been linked with the FastCGI I/O library. Precompiled binaries are
- available for several platforms, including DEC Alpha, HP-UX and
- SPARC/Solaris, or you can rebuild Perl from source with patches
- provided in the FastCGI developer's kit. The FastCGI Perl interpreter
- can be used in place of your normal Perl without ill consequences.</P>
- <P>You can find FastCGI modules for Apache and NCSA httpd, precompiled
- Perl interpreters, and the FastCGI developer's kit all at URL:</P>
- <PRE>
- <A HREF="http://www.fastcgi.com/">http://www.fastcgi.com/</A></PRE>
- <P>
- <HR>
- <H1><A NAME="writing fastcgi perl scripts">WRITING FASTCGI PERL SCRIPTS</A></H1>
- <P>FastCGI scripts are persistent: one or more copies of the script
- are started up when the server initializes, and stay around until
- the server exits or they die a natural death. After performing
- whatever one-time initialization it needs, the script enters a
- loop waiting for incoming connections, processing the request, and
- waiting some more.</P>
- <P>A typical FastCGI script will look like this:</P>
- <PRE>
- #!/usr/local/bin/perl # must be a FastCGI version of perl!
- use CGI::Fast;
- &do_some_initialization();
- while ($q = new CGI::Fast) {
- &process_request($q);
- }</PRE>
- <P>Each time there's a new request, CGI::Fast returns a
- CGI object to your loop. The rest of the time your script
- waits in the call to new(). When the server requests that
- your script be terminated, <CODE>new()</CODE> will return undef. You can
- of course exit earlier if you choose. A new version of the
- script will be respawned to take its place (this may be
- necessary in order to avoid Perl memory leaks in long-running
- scripts).</P>
- <P>CGI.pm's default CGI object mode also works. Just modify the loop
- this way:</P>
- <PRE>
- while (new CGI::Fast) {
- &process_request;
- }</PRE>
- <P>Calls to header(), start_form(), etc. will all operate on the
- current request.</P>
- <P>
- <HR>
- <H1><A NAME="installing fastcgi scripts">INSTALLING FASTCGI SCRIPTS</A></H1>
- <P>See the FastCGI developer's kit documentation for full details. On
- the Apache server, the following line must be added to srm.conf:</P>
- <PRE>
- AddType application/x-httpd-fcgi .fcgi</PRE>
- <P>FastCGI scripts must end in the extension .fcgi. For each script you
- install, you must add something like the following to srm.conf:</P>
- <PRE>
- AppClass /usr/etc/httpd/fcgi-bin/file_upload.fcgi -processes 2</PRE>
- <P>This instructs Apache to launch two copies of file_upload.fcgi at
- startup time.</P>
- <P>
- <HR>
- <H1><A NAME="using fastcgi scripts as cgi scripts">USING FASTCGI SCRIPTS AS CGI SCRIPTS</A></H1>
- <P>Any script that works correctly as a FastCGI script will also work
- correctly when installed as a vanilla CGI script. However it will
- not see any performance benefit.</P>
- <P>
- <HR>
- <H1><A NAME="caveats">CAVEATS</A></H1>
- <P>I haven't tested this very much.</P>
- <P>
- <HR>
- <H1><A NAME="author information">AUTHOR INFORMATION</A></H1>
- <P>Copyright 1996-1998, Lincoln D. Stein. All rights reserved.</P>
- <P>This library is free software; you can redistribute it and/or modify
- it under the same terms as Perl itself.</P>
- <P>Address bug reports and comments to: <A HREF="mailto:lstein@cshl.org">lstein@cshl.org</A></P>
- <P>
- <HR>
- <H1><A NAME="bugs">BUGS</A></H1>
- <P>This section intentionally left blank.</P>
- <P>
- <HR>
- <H1><A NAME="see also">SEE ALSO</A></H1>
- <P><A HREF="../../lib/CGI/Carp.html">the CGI::Carp manpage</A>, <A HREF="../../lib/CGI.html">the CGI manpage</A></P>
- <TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0 WIDTH=100%>
- <TR><TD CLASS=block VALIGN=MIDDLE WIDTH=100% BGCOLOR="#cccccc">
- <STRONG><P CLASS=block> CGI::Fast - CGI Interface for Fast CGI</P></STRONG>
- </TD></TR>
- </TABLE>
-
- </BODY>
-
- </HTML>
-