Deutsch English
Blog
Home
Über tdbengine
Newsletter
Download
Helpware
Chat
Dokumentation
Einführungskurs
Befehlsreferenz
HOWTO - Wie kann ich...?
Projekte
Mini-HTTP-Server
c't Datenbank Contest
Links
Benchmarks
Bug Reporting
Supportanfrage
 
Home    Überblick    Suche    Impressum    Kontakt    Mitglieder
Mini-HTTP-Server

  Download now   Mini-HTTP-Server (860.158 Bytes / Stand 22.12.2004)
Ein komplett in EASY geschriebener Web-Server. Ideal geeignet für tdbengine-basierte Stand-Alone Applikationen


Es handelt sich hierbei um einen minimalistischen HTTP-Server, der es erlaubt, ohne weitere Software beliebige tdbengine-Anwendungen auf einem lokalen PC auszuführen.

Enthalten ist die ein großer Teil der Internet-Site "www.tdb-engine.de" inklusive der kompletten Dokumentation und der Support-Datenbank. (Stand vom Mai 2003)


Hier nun eine kurze Beschreibung:

Nach dem Auspacken der Zip-Datei in ein eigenes Verzeichnis, kann der Server durch ein kleines Script gestartet werden. Bitte passen Sie in der Batch- bzw. Bash-Datei den Pfad zu Ihrer tdbengine(.exe) an oder kopieren diese in das gleiche Verzeichnis.

Das Startscript (server.bat oder server.sh) startet wiederum die tdbengine zusammen mit dem Programm "easyserv.prg". Solange dieses Programm läuft (und das sollte es, bis man es gewaltsam mit STRG+C abbricht), steht auf dem Port 3444 ein (lokaler) HTTP-Server zur Verfügung, der folgende Dateien liefert:

Bilder (.jpg und .gif)
Stylesheets (.css)
HTML-Seiten (.html und .htm)
EASY-Programme (.prg)

Die Konfiguration erfolgt über die Datei "server.ini", in der folgende Einstellungen möglich (aber auch notwendig) sind:

ServerPort=<Port des Servers>

Über eine IP-Adresse wird ein Rechner (oder ein Netzwerk) angesprochen, über den Port ein Dienst auf eben diesem Rechner (bzw in diesem Netzwerk). Ein Port ist zunächst nichts weiter als eine (vorzeichenlose) 16-Bit-Zahl. Bestimmte Ports sind reserviert, andere haben eine feste (historische) Zuordnung zu ganz speziellen Diensten, wie beispielsweise 110 for POP3 oder 25 für SMTP oder 80 für HTTP.

ServerPort=3444


In unserem (mitgelieferten) Beispiel verwenden wir den Port 3444 auf dem lokalen Rechner. Die Adresse des lokalen Rechners ist immer 127.0.0.1, die man auch über den Namen "localhost" ansprechen kann (zumindest, wenn in der Datei "hosts" (unter \windows oder /etc) der Eintrag

127.0.0.1 localhost

steht). Damit ein Web-Browser mit unserem Server kommuniziert, muss demnach jede URL mit "http://localhost:3444" beginnen.

Hinweis: Wenn die Portangabe weggelassen wird, ergänzt diese der Web-Browser intern immer als "80", dem Standardport für HTTP.

Anmerkung: Wir verwenden absichtlich nicht den Standardport 80 für unseren Server, um möglichen Konfikten mit bereits laufenden Web-Servern (Apache, Sambar, PWS) von vorneherein aus dem Weg zu gehen. Die einzige Anwendung, die eventuell diesen Port auch noch benutzt, ist der Denali-Server.

DocumentRoot=<Basisverzeichnis der HTML-Seiten und Bilder>

Hier wird dasjenige Verzeichnis angegeben, in dem wenigstens die Default-Seite (index.html) enthalten ist. Es handelt sich um das Verzeichnis, dass in einer URL als Root-Verzeichnis angesprochen wird.

Übrigens können alle Verzeichnisangaben relativ zu demjenigen Verzeichis angegeben werden, in dem die tdbengine und easyserv.prg liegen.

In unserem Beispiel lautet der Eintrag

DocumentRoot=./html


womit das lokale Unterverzeichnis "html" angegeben ist.

Mit der URL "http://localhost:3444/index.html wird also genau die Datei ./html/index.html angesprochen, mit der URL "http://localhost:3444/pics/logo.gif" die Datei ./html/pics/logo.gif usw.

Mit dieser Angabe lassen sich schon komplette statische Web-Auftritte über unseren Mini-Server abwickeln. Was jetzt noch fehlt, ist die Festlegung

a) woran der Server CGI-Programme erkennt, und
b) wo diese Programme liegen

Aus Sicherheitsgründen sollten CGI-Programme und sonstige Dateien strikt getrennt werden. Der übliche Weg besteht darin, dass CGI-Programme immer unterhalb eines dafür speziell eingerichteten Verzeichnisses abgelegt werden. Um in der URL nicht über die physikalische Struktur des CGI-Anfangsverzeichnisses zu verraten, verwendet man ein Alias, genauer gesagt ein Script-Alias wie Beispielsweise "cgi-bin" oder "cgi-tdb" in der URL. Wenn der Server dieses erkennt, greift er nicht auf ein Unterverzeichnis des DokumentRoot zu, sondern eben genau auf das Verzeichnis mit den Programmen.

Zur Festlegung benötigen wir also zwei Angaben:

ScriptAlias=<Pseudo-Verzeichnis zur Kennzeichnung von Scripten>
ScriptDir=<physikalisches Verzeichnis, das dafür verwendet wird>

In unserem Beispiel:

ScriptAlias=/cgi-tdb/
ScriptDir=.


Das war auch schon alles an Konfiguration.

Die tdbengine.ini sollte man zunächst unverändert lassen:

[globals]
sema=nosema
cgibuff=100000
cdmode=1


Interessant ist vor allem das Einschalten des CD-Modus (cdmode=1). Hier öffnet die tdbengine sämtliche Dateien im R/O-Modus, auch wenn es in den Programmen anders angegeben wird. Textdateien, die zum Schreiben geöffnet werden, werden dann als Ramtexte angelegt, auf die solange zugegriffen werden kann, wie der Server läuft. Damit kann man problemlos Programme simulieren, die beispielsweise mit dynamischen Sessions und/oder Konfigurationsdateien arbeiten (wie eta Shopping-Systeme etc).

Zusätzlich führt die tdbengine vor dem Schreiben des CGI-Puffers eine Reihe von Ersetzungen durch, die in der Datei "urls.ini" in der Form

abc;xyz

aufgeführt sind. Hier werden alle Vorkommen von "abc" durch "xyz" ersetzt. In unserem Beispiel steht hier:

www.tdb-engine.de/;localhost:3444/
/cgi-tdb/helpware/helpware_neu.prg;sorry.html
pages/forum.html;sorry.html


Damit werden absolute Referenzen auf www.tdb-engine.de auf den localhost umgeleitet und die Verweise auf zwei Dateien (Helpare und Forum) durch einen Verweis auf "sorry.html" ersetzt.

Zum Abschluss noch ein paar Hinweise zum eigentlichen Server-Programm easyserv.mod:

Hier werden einige bislang undokumentierte tdbengine-Funktionen verwendet:

GetEnv('set name=value') setzt Environment-Variablen, die allerdings nur innerhalb des Servers sichtbar sind.
InitCGI(part_url) initialisiert die CGI-Umgebung, so dass mit CGIGetParam() und GetQuerySring() auf die Klienten-Daten zugegriffen werden kann. Dazu benötigt die Funktion die Environment-Variablen "CONTENT_TYPE" und "CONTENT_LENGHT", die deshalb vorher gesetzt werden müssen (und die aus dem Header der Browser-Anfrage extrahiert werden).

InitCGI() setzt auch alle internen Fehlerzustände zurück und gibt von einem Programm benötigte Speicherbereiche wieder frei.

Der Rest dürfte nicht allzu schwer zu verstehen sein, oder?



tdbengine Anwendungen im Web:

Open-Source Web CMS


Open-Source Bug-Tracking


Free wiki hosting

Open-Source Wiki-System

Kostenloses Foren-Hosting

Diät mit tdbengine 8-)

tdbengine chat
irc.tdbengine.org
#tdbengine

   Copyright © 2003-2004 tdb Software Service GmbH
   Alle rechte vorbehalten. / All rights reserved
   Letzte Änderung: 04.05.2004


ranking-charts.de

Programmers Heaven - Where programmers go!