Open Source im professionellen Einsatz

Web-Anwendungen mit dem Tcl-Webserver Tclhttpd

Lieferdienst

Der in Tcl programmierte Webserver Tclhttpd ist eine ideale Basis für leistungsfähige Web-Anwendungen, die auch und gerade mit Tcl schnell gebaut sind. Funktionen aus der Tcl-Bibliothek und ihren vielen Erweiterungen helfen dabei. Eine eigene Bibliothek übernimmt die HTML-Fleißarbeit.

Für Web-Anwendungen in Tcl steht eine Reihe von Techniken zur Verfügung. Neben einfachen CGI-Skripten, Tcl-Modulen für den Apache oder umfangreichen Application-Servern bietet sich der Tclhttpd an. Der komplett in Tcl geschriebene Webserver kann auf eine lange Entwicklungsgeschichte zurückblicken, entsprechend ausgereift ist er heute. Er dient mit seinen vielen Funktionen als Basis für ausgefeilte Web-Anwendungen. Dieser Artikel zeigt verschiedene Wege, wie man mit seiner Hilfe HTML-Seiten erzeugen kann oder Anfragen bearbeitet.

Ursprung des Tclhttpd waren 175 Zeilen Tcl, die Brent Welch Mitte der 90er Jahre geschrieben hat. Inzwischen ist der Code auf etwa 12000 Zeilen angewachsen, die umfangreiche Tcllib ist in dieser Zählung noch gar nicht berücksichtigt. Diese stabile Basis unterstützt den schnellen Weg zur Anwendung auf viele Arten. Tclhttpd kann:

  • Statische Webseiten ausliefern,
  • Server Side Includes ausführen,
  • einzelne URLs, ganze Verzeichnisse oder verschiedene MIME-Typen mit Tcl-Skripten verknüpfen,
  • Tcl-Code in HTML einbetten,
  • Cookies setzen und lesen,
  • Sessions verwalten,
  • Benutzer authentifizieren,
  • Formulare auswerten,
  • Files auf den Server laden (Upload),
  • E-Mail unterstützen.

Ziel der Entwicklung war nie, mit dem Platzhirsch Apache zu konkurrieren. Wer mit vielen hundert Anfragen pro Sekunde rechen muss, ist mit Tcl-Modulen wie »mod_tcl«[5] oder »mod_websh«[6] im Apache sicherlich besser bedient. Wer jedoch in erster Linie an eine Web-Anwendung für klein- bis mittelvolumige Websites denkt, dem bietet Tclhttpd eine solide Grundlage.

Für kleine und große Projekte geeignet

Verstecken muss sich Tclhttpd aber auch nicht, immerhin ist er der Server für [www.tcl.tk]. Diese Seite bewältigt ein beachtliches Volumen. Andere große Anwendungen sind ein weltweites Netz für meteorologische Daten von Flugplätzen oder das Medusa-Projekt[4], das auf eine umfangreiche Datenbank zugreift. Hört man sich bei den Anwendern um, dann sind es aber vor allem interne Projekte, die auf dieser Basis durchgeführt werden.

Die Tclhttpd-Quellen sind bei Sourceforge zu finden[1]. Dort gibt es zwei Versionen: die All-inclusive-Variante »tclhttpd-3.2-dist« samt Tcl, Thread und Tcllib[3] und die aktuelle Version »tclhttpd-3.3.1«. Der Vorteil des älteren Pakets ist die einfache Installation. Bis zum komplett laufenden Webserver genügen folgende Schritte:

# tar -xzf tclhttpd3.2-dist.tar.gz
# cd tclhttpd3.2-dist/tclhttpd3.2
# make
# make install
# cd bin
# wish httpd.tcl
Running with 256 file descriptor limit
httpd started on port 8015

Ein beliebiger Browser zeigt dann unter der Adresse »http://localhost:8015« die mitgelieferten Beispiele an, sie illustrieren einige der Möglichkeiten des Pakets. Der Server wird mit der Datei »tclhttpd .rc« konfiguriert, ein Beispiel findet sich in Listing 1.

Am Anfang eigener Entwicklungen bietet es sich an, den Inhalt des Beispiel-Verzeichnisses zu verwenden, um das Control-Panel und die Statistiken zu behalten. Mit dem Control-Panel lassen sich vom Browser aus Variablen abfragen oder Bibliotheken neu laden. Beides ist beim Debugging sehr praktisch.

Der Tclhttpd kann den Inhalt seiner Webseiten dynamisch zur Laufzeit erstellen. Dazu unterstützt er mehrere Verfahren. Die einfachste Variante wird mit »Direct_Url« konfiguriert: Der Server leitet dann alle Anfragen für eine URL an die konfigurierte Tcl-Prozedur. Im Gegensatz zu CGI-Skripten startet er dafür keinen separaten Prozess, die Prozedur läuft direkt im Server. Sie kann daher auch Variablen aus dem Server verwenden, etwa für Zähler oder um Datenbankverbindungen offen zu halten.

Listing 1: Tclhttpd-Konfiguration

01 # Beispielhafte Konfiguration
02 
03 # httpd läuft als User 500 in Gruppe 100
04 Config uid 500
05 Config gid 100
06 
07 # httpd hört auf Port 8015, normaler Hostname
08 Config host     [info hostname]
09 Config port     8015
10 
11 # Eigene Skripts im Verzeichnis .../custom
12 Config library  [file join [Config home] .. custom]
13 
14 # HTML-Dateien liegen in /usr/local/httpd/htdocs
15 Config docRoot  /usr/local/httpd/htdocs
16 
17 # Keine Threads erzeugen
18 Config threads  0
19 Config main     [file join [Config home] httpdthread.tcl]
20 
21 # Logfile: /usr/local/httpd/log
22 Config LogFile  /usr/local/httpd/log
23 
24 Config LogFlushMinutes 0

Diesen Artikel als PDF kaufen

Als digitales Abo

Als PDF im Abo bestellen

comments powered by Disqus

Ausgabe 07/2013

Preis € 6,40

Insecurity Bulletin

Insecurity Bulletin

Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...

Linux-Magazin auf Facebook