Federleichte Diener
Wenn man vom „Internet der Dinge“ hört, denkt man selten daran, was sich tatsächlich hinter dem Begriff verbirgt: eine riesige Versammlung von kleinen Webservern, auf denen spezialisierte Webanwendungen laufen. iX stellt ein paar „Serverchen“ vor, die dafür infrage kommen.
- Daniel Koch
Computer findet man längst nicht mehr nur auf dem Schreibtisch, sondern in einer Vielzahl unterschiedlicher Geräte. Die wiederum verfügen nicht selten über eine Netz- oder WLAN-Anbindung und einen integrierten Webserver zum Steuern und zum Abrufen von Informationen. Allerdings in der Regel keinen vollwertigen HTTP-Server, etwa vom Stamm der Apachen, sondern einen der zahlreichen Embedded-Webserver, die mit den begrenzten Ressourcen deutlich sparsamer umgehen.
Sie erfüllen dieselben Aufgaben wie klassische Webserver. Dazu gehört zunächst das Übertragen der Webdokumente an den Client via HTTP(S). Einige beherrschen zudem das dynamische Erstellen von Dokumenten, etwa per Server-Side Scripting, was sie für Anbieter und Entwickler von Webapplikationen interessant macht. Hohe Zuverlässigkeit und geringer Ressourcenbedarf erschließen ihnen weitere Einsatzgebiete, etwa im Distributed Computing.
Mittlerweile gibt es ein großes Angebot an Embedded-Webservern. Die meisten sind in C oder C++ geschrieben und zeichnen sich durch ihre geringe Größe sowie eine niedrige Belastung der CPU aus. Außerdem sind sie in der Regel weitgehend plattformunabhängig und lassen sich leicht in bestehende Anwendungen integrieren.
Dynamische Webseiten in C/C++
Einer der bekanntesten Embedded-Webserver ist Barracuda von Real Time Logic. Er wurde speziell für den Einsatz in eingebetteten Systemen entwickelt. Als serverseitige Sprachen stellt er C Server Pages (CSP) und Lua Server Pages (LSP) zur Verfügung. Mit CSP können Entwickler Anwendungen, die in C oder C++ geschrieben sind, in HTML-Dokumente einbinden. Die Größe des Servers variiert zwischen 100 und 500 KByte, wobei die tatsächliche Größe von den eingesetzten Plug-ins abhängt – etwa SharkSSL, Web Services oder WebDAV.
Barracuda läuft unter Windows, OSE, QNX, ThreadX und VxWorks. Der Server lässt sich sowohl für eine einfache Gerätesteuerung als auch als vollwertiger Applikationsserver einsetzen. Erhältlich ist er unter vier verschiedenen Lizenzen, die von einem lizenzfreien Binärpaket für Entwickler bis hin zur kommerziellen Source-Code-Lizenz für Unternehmen reichen.
Mongoose richtet sich in erster Linie an Anwender, die einen einfachen Webserver bevorzugen. Er läuft unter Windows, Mac OS X und den meisten Unix-Varianten. Der Quelltext des Open-Source-Servers steht unter der MIT-Lizenz. Er besteht aus einer C- und einer Header-Datei und lässt sich daher leicht in eigene Anwendungen integrieren. Als eigenständiges Programm hat er nach dem Übersetzen eine Größe von lediglich 40 KByte. Zu den unterstützten Sprachen gehören neben C/C++ auch Python und C#. Der Server eignet sich hauptsächlich für schnelle Tests, File-Sharing und die Webentwicklung.
Klone von Koan Logic ist ein Server, der in erster Linie auf hohe Leistung und geringe CPU-Belastung optimiert wurde. Auch sein Speicherbedarf fällt mit 110 KByte relativ gering aus. Kann man jedoch auf SSL-Unterstützung via OpenSSL nicht verzichten, vergrößert sich der benötigte Platz auf 350 KByte.
Webanwendungen kompiliert
Für dynamische Webseiten verwendet Klone eine Kombination aus HTML und C/C++. Den C- oder C++-Code muss der Entwickler mit <% <c-code> %> ins HTML-Dokument einbinden. Ein Compiler extrahiert und übersetzt den Quelltext und linkt das resultierende Binary mit dem Server. Dadurch erreicht der Server eine höhere Performance, als es beim Einsatz klassischer Skriptsprachen der Fall wäre.
Klone unterstützt HTTPS und virtuelle Hosts. Zudem lassen sich statische Inhalte komprimieren und mit dem AES-Algorithmus verschlüsseln. Für Ersteres muss die Bibliothek zlib vorhanden sein. Das im generierten Binary enthaltene Dateisystem macht den Server unabhängig von den Speicheroptionen des Betriebssystems. So lassen sich beispielsweise Cookies im Arbeitsspeicher und nicht – wie sonst üblich – ausschließlich im Dateisystem speichern. Inhalte kann man für schnelleren Zugriff ebenfalls im RAM ablegen.
Der Server läuft unter zahlreichen Unix-Derivaten sowie unter Windows und ist kostenlos unter Version 2 der GNU General Public License (GPL) erhältlich. Wer mit deren Bedingungen nicht leben kann, muss für 1950 € eine kommerzielle Lizenz kaufen. Damit erwirbt der Nutzer das Recht, das Klone-Framework auf einer beliebigen Anzahl an Rechnern zu installieren und den Server beliebig oft und zeitlich unbegrenzt weiterzugeben. Software, die auf Klone aufsetzt, kann man entweder unter der GPL oder unter der Klone Commercial License veröffentlichen.
Für Entwickler ist der Appweb-Server interessant, da er vergleichsweise viele dynamische Sprachen unterstützt. In der aktuellen Version 3.2.x haben die Entwickler die Performance des Servers deutlich steigern können. Zudem gibt es jetzt das serverseitige JavaScript-Framework Ejscript, das außer dem vollen Funktionsumfang von ECMAScript 3 zahlreiche Erweiterungen mitbringt. Dazu gehören der Object-Relational Mapper (ORM), der unter anderem mit der integrierten SQLite-Datenbank zusammenarbeitet, sowie das Model-View-Controller-Paradigma.
CGI klassisch, einfach oder schnell
Dynamische Inhalte lassen sich mit Appweb auf mehreren Wegen generieren: Der Server unterstützt außer Ejscript die Embedded Server Pages, das Embedded Gateway Interface, PHP 4 und 5 sowie CGI/1.1. Die Software läuft unter Windows ab XP, Linux, Mac OS X, FreeBSD, VxWorks und Windows CE. Insgesamt benötigt der Server rund 800 KByte Arbeitsspeicher.
Binärdateien stehen für Windows XP (32 Bit), Mac OS X, Debian/Ubuntu und Fedora/Red Hat zur Verfügung. Für andere Plattformen muss der Nutzer den unter der GPL stehenden Quelltext selbst kompilieren. Wer Garantie, Support oder eine kommerzielle Lizenz benötigt, bekommt sie beim Anbieter Embedthis Software.
Ein weiterer schlanker Webserver ist lighttpd („lighty“ ausgesprochen). Er liefert standardmäßig statische Inhalte via HTTP(S) aus. Bei Bedarf lässt sich PHP per FastCGI einbinden. Zusätzlich kann man über das Simple Common Gateway Interface (SCGI) Perl, Python oder Ruby nutzen. Darüber hinaus bietet lighttpd unter anderem virtuelle Hosts, Server Side Includes, URL-Rewriting und HTTP-Redirects. Der leistungsfähige Server kommt auf einer Reihe großer Webseiten zum Einsatz, etwa bei MySpace, YouTube oder SourceForge. Erhältlich ist das Programm im Quelltext unter der (revidierten) BSD-Lizenz. Unter Fedora Core 3, openSUSE, Debian, Gentoo, PLD-Linux und OpenWRT ist der Server als Binärpaket verfügbar.
Zu den kleinsten Webservern, die es momentan gibt, gehört micro_httpd. Er kommt mit lediglich 200 Zeilen Quelltext und einer Größe von 12 KByte aus, besitzt aber alle grundlegenden Funktionen eines HTTP-Servers. Nützlich ist diese Variante in erster Linie für kleinere Projekte, da der Server nicht viel mehr kann, als HTML-Dokumente auszuliefern. Erschwerend kommt hinzu, dass er inetd nutzt, was eine vergleichsweise niedrige Performance nach sich zieht. Außerdem beschränkt es das Einsatzgebiet der unter der GPL stehenden Open-Source-Servers auf Linux- und Unix-Systeme. Will man nur ein bestimmtes Verzeichnis mit statischen Dokumenten zugänglich machen, genügt der Funktionsumfang von micro_httpd aber allemal.
Fazit
Das Angebot an Embedded-Webservern ist groĂź, was die Wahl des passenden Systems nicht eben vereinfacht. FĂĽr Entwickler von Webanwendungen wichtige Kriterien sind neben der Performance in erster Linie die unterstĂĽtzten Sprachen und die Lizenzbedingungen. Designer von Embedded-Systemen mĂĽssen vor allem den Ressourcenbedarf im Auge behalten, da der sich auch auf die Kosten der Hardware auswirkt.
Daniel Koch
arbeitet als freiberuflicher Entwickler und Autor.