http://www.pronix.de -> Tutorials -> FastCGI mit C -> Portierungen von CGI-Anwendungen nach FastCGI

Portierungen von CGI-Anwendungen nach FastCGI

Die Portierung eines CGI-Programmes nach FastCGI ist vom Ansatz her einfach, die Feinheiten der Speicherverwaltung und Programmabläufe sollte allerdings gründlich überarbeitet werden, um die Möglichkeiten von FastCGI voll zu nutzen.

Anpassen von int main()

Als Erster Schritt muss die Funktion main() überarbeitet werden, um das Programm in die FCGI_Accept() - Schleife zu bringen.
Hierbei wird nach der initialisierung der Variablen die Schleife eingefügt und vor dem abschliessenden return die Schleife wieder geschlossen:

Vorher

#include <stdio.h>

int main(void)
{
   int   a = 0;
   // weitere Initialisierungen


   // Block mit Programmcode
   return 0;
}

Nacher

#include <stdio.h>

int main(void)
{
   int   a = 0;
   // weitere Initialisierungen

   while(FCGI_Accept() >= 0)
   {
      // Block mit Programmcode
   }
   return 0;
}

Ersetzen der Header

Die bisher eingesetzte Header-Datei stdio.h muss in allen Dateien durch die Datei fcgi_stdio.h ersetzt werden. Diese Arbeit kann durch zwei Befehle auf der Kommandozeile erledigt werden:

TTY

you@host > for file in `find . -name '*.c'`; do perl -pi -e 's/\<stdio\.h\>/\<fcgi_stdio\.h\>/g' $file; done

you@host > for file in `find . -name '*.h'`; do perl -pi -e 's/\<stdio\.h\>/\<fcgi_stdio\.h\>/g' $file; done

Ab jetzt sollte das Programm nach einem Neuübersetzen und Linken gegen libfcgi als FastCGI-Anwendung lauffähig sein.

Die Feinarbeiten

Hier wirds knifflig. Das Programm sollte genauestens analysiert werden und Initialisierungen und ähnliche Schritte, die bei jedem Aufruf gleich sind sollten vor die Schleife verschoben werden, um das Programm weiter zu beschleunigen.
Das Programm sollte genauestens debuggt werden, um Speicherfehler zu verhindern und in einer Testumgebung unter Last gesetzt werden. Dies kann z.B. mit curl geschehen:

TTY

you@host > counter=1; while [ "$counter" -lt 1000000 ]; do curl http://localhost/fcgi-bin/index.fcgi&; done 2>&1

Der Speicherbedarf und die CPU Last sollte nun genauestens überprüft werden, um eventuellen Fehlern auf die Schliche zu kommen.