Tcl/Tk im Internet

Safe-Tcl und Tcl-Plugin

Um Tcl-Programme unbekannter Herkunft ausführen zu können, kann der Hauptinterpreter einen sicheren Interpreter starten, in dem die Applikation läuft. Alle gefährlichen Kommandos wie das Ausführen externer Programme oder Filemanipulationen sind verboten.

Mittels Policies können dem Slave-Interpreter weitere Rechte eingeräumt werden, wie das Zugreifen auf bestimmte Files oder Sockets (Netzverbindungen).

Auf der Basis dieser Technik wurde das Tcl/Tk-Plugin für Netscape (Unix und Win32) sowie den Internet Explorer realisiert. Eine Tcl-Anwendung kann dann mittels

  <embed src="url" width=breite height=hoehe>
direkt in die Webseite eingebunden werden.

Tcl als CGI-Sprache

Mit einer zusätzlichen, komplett in Tcl geschriebenen Bibliothek cgilib.tcl wird es sehr einfach, CGI-Programme in Tcl zu realisieren.

Das Commando Cgi_Parse zerlegt die übermittelten Formulardaten und speichert die Werte in einem assoziativen Array cgi. Die Umgebungsvariablen sind im Array env enthalten.

Cgi_Header und Cgi_End bauen Anfang und Ende der auszugebenden Seite auf. Weitere Funktionen wie H1 und P vereinfachen die Konstruktion der Tags.

Da für viele Datenbanken (mSQL, mySQL, PostgreSQL, ADABAS-D, ...) Tcl-Schnittstellen existieren, können so einfache Datenbank-WWW-Gateways geschrieben werden.

Nachteil gegenüber Perl im Apache ist die geringere Performance, da der Tcl-Interpreter bei jedem CGI-Script erst gestartet werden muß. Die Verwendung des Tcl-httpd wird hier eine Beschleunigung bringen.

Netzverbindungen

Netzverbindungen werden durch Erzeugen eines Sockets hergestellt. Dieser kann wie ein Filehandle für Ein- und Ausgabe genutzt werden.
  set sock [socket host port]
  # Lesen
  gets $sock line
  # Schreiben
  puts $sock $text
  flush $sock  

Beispiel: sock1.tcl

Ein komfortableres Programm zum Testen: sock2.tcl

Genauso einfach läßt sich ein Server installieren:

  set port 1234
  set serversock [socket -server Accept $port]
  proc Accept {newsock addr port} {
    # config newsock
    ...
  }
Der an die Accept-Prozedur übergebene Socket muß für Fileevent-Handling konfiguriert werden, damit die erste Verbindung nicht die zukünftigen Verbindungen blockiert.

Beispiel: echo_serv.tcl

Vom SunScript-Team wurden mit dieser Technik ein WWW-Server (TclHttpd) und ein HTML-Browser/-Editor (WebTk - leider ohne Tabellen) realisiert. Zu beziehen von http://sunscript.sun.com/TclTkCore