<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> <HTML> <HEAD> <TITLE> FastCGI Programmer's Guide - Chapter 4, Developing FastCGI Applications in Tcl </TITLE> <STYLE TYPE="text/css"> body { background-color: #ffffff; } li.c2 {list-style: none} div.c1 {text-align: center} </STYLE> </HEAD> <BODY> <A HREF="cover.htm">[Top]</A> <A HREF="ch3perl.htm">[Prev]</A> <A HREF="apaman.htm">[Next]</A> <A HREF= "ap_guida.htm">[Bottom]</A> <HR> <BR> <A NAME="3659"></A> <DIV CLASS="c1"> <H1> 4 Developing FastCGI<BR> Applications in Tcl </H1> </DIV> <A NAME="4835"></A> <P> This chapter explains how to code FastCGI applications in Tcl. Prior to creating a FastCGI application, you must have a FastCGI-savvy version of the Tcl interpreter. Open Market develops Tcl binaries for popular platforms and makes them available with our developer's kit. </P> <P> <A NAME="4943"></A> The FastCGI-savvy binaries are extensions of standard Tcl, and are intended to replace your existing Tcl installation. There is no need to maintain two versions of Tcl: the version that we supply will work fine when invoked from a shell or a CGI program. There are also directions in the developer's kit for how to make your own FastCGI-savvy Tcl, if you need a version for some platform that we don't supply. </P> <P> <A NAME="4221"></A> In many cases, you can convert a Tcl script from CGI to FastCGI by adding a few lines of code to an existing script. For more complex scripts, you may also need to rearrange some existing code. </P> <BR> <BR> <H1> Getting Started </H1> <A NAME="4223"></A> <P> The first line of any Tcl script typically specifies the pathname of the Tcl interpreter itself. You must specify the pathname of a FastCGI-savvy Tcl. </P> <P> <A NAME="4226"></A> Then, you have to divide FastCGI scripts into the following two sections: </P> <BR> <BR> <UL> <LI CLASS="c2"> <A NAME="4227"></A> </LI> <LI> Initialization section, which is executed only once. <A NAME="4228"></A> </LI> <LI> Response loop section, which gets executed every time the FastCGI script gets called. </LI> </UL> <A NAME="4229"></A> <P> A response loop typically has the following format: </P> <BR> <BR> <PRE> <A NAME="4923">while {[FCGI_Accept] >= 0 } { </A> <A NAME="4925"># body of response loop </A> <A NAME="4367">} </A> </PRE> <A NAME="4233"></A> <P> The <CODE>FCGI_Accept</CODE> call returns 0 whenever a client requests the FastCGI script. Otherwise, the <CODE>FCGI_Accept</CODE> call returns -1. </P> <BR> <BR> <H1> Example: TinyFastCGI </H1> <A NAME="4343"></A> <P> Here is a simple example of a FastCGI application written in Tcl: </P> <BR> <BR> <PRE> <A NAME="4344"></A> #!fcgi-savvy-tcl set count 0 # Response Loop while {[FCGI_Accept] >= 0 } { incr count puts -nonewline "Content-type: text/html\r\n\r\n" puts "<title>FastCGI Hello! (Tcl)</title>" puts "<h1>FastCGI Hello! (Tcl)</h1>" puts "Request number $count running on host <i>$env(SERVER_NAME)</i>" } </PRE> <P> </P> <HR> <BR> <A HREF="cover.htm">[Top]</A> <A HREF="ch3perl.htm">[Prev]</A> <A HREF="apaman.htm">[Next]</A> <A HREF= "ap_guida.htm">[Bottom]</A> <HR> <BR> <!-- This file was created with Quadralay WebWorks Publisher 3.0.3 --> <!-- --> <!-- For more information on how this document, and how the rest of --> <!-- this server was created, email yourEmail@xyzcorp.com --> <!-- --> <!-- Last updated: 04/15/96 08:00:19 --> </BODY> </HTML>