Webserver Tips

 

Webserver Checkliste

 

Die aufzurufenden Webseiten müssen auf die Micro SD-Karte kopiert worden sein, und die Karte muss im SD-Karten Slot der AVR32Bit Unit eingerastet sein.

Für die SD-Karte wird nur das FAT Dateisystem unterstützt (siehe FAT Unterstützung).

Der Webserver wird gestartet, nach dem im Benutzerprogramm ETH_StartWebserver() aufgerufen wird. Der TCP/IP Port im Web-Browser (Default: 80) muss mit dem Port im Aufruf von ETH_StartWebserver übereinstimmen.

Die Anzahl der in WEB_SetDynVar benutzten dynamischen Variablen muss mit der Definition im WEB_BUF Makro und mit dynvar_cnt in WEB_StartServer korrespondieren.

 

 

 Man kann beim Stoppen des Programms mit dem Start/Stop Taster den lwIP TCP/IP-Stack in den Zustand bringen, das noch dynamischer Speicher der aktuellen Verbindung nicht frei gegeben wird. Dieser Speicher kann beim Neustart des Programms fehlen. Bei Problemen sollte im Zweifelsfall der Reset-Taster betätigt werden, um einen kompletten Neustart des Systems auszulösen.

 

Webserver Optimierung

 

Der lwIP TCP/IP-Stack ist darauf optimiert, bei embedded Devices möglichst gut mit Webseiten zu arbeiten, die im Flash-Speicher abgelegt sind. Mit der im C-Control Pro AVR32Bit Modul eingebauten SD card kann man sehr viel mehr Daten speichern als im Flash, aber es birgt den Nachteil, das die Webseiten im RAM zwischengeladen werden müssen, bevor sie über das Ethernet verschickt werden. Um den "RAM Hunger" des lwIP-Stacks zu begrenzen, sind mehrere Dinge zu beachten:

 

Im normalen Webserverbetrieb sollte der "TCP/IP Speicher" in der C-Control Konfiguration auf ca. 16kb gesetzt werden.

Alle GET-Requests des Webservers, die keine CGI Variablen in der URL übergeben, werden in einer Warteschlange serialisiert. Dies geschieht, damit immer nur RAM zum Senden einer Webseite gleichzeitig angefordert wird.

Da die SD-Card in der C-Control Pro über SPI angeschlossen ist, und nicht wie bei einem PC im 4-Bit Parallelmodus, sind nur geringere Übertragungsraten zu realisieren. In Tests erreicht man mit wget.exe ein mittlere Übertragungsrate zwischen 140-150 kbyte/Sek. Daher sollten z.B. Bilder und andere Resourcen nicht wesentlich über 100kb hinausgehen, da sonst die Webseite nur langsam aufgebaut wird.

Der Webserver unterstützt das "If-Modified-Since" Caching Protokoll der aktuellen Webbrowser. Daher sollte das Caching im Webbrowser eingeschaltet sein, sowie Uhrzeit und Datum der Dateien auf der SD-Card nicht in der Zukunft liegen.

Möchte man nur CGI Variablen in der URL bei einem Javascript GET Request übergeben, ohne das man eine Antwort vom Server benötigt, sollte die URL "setvars.js" genutzt werden. Dieser Request übernimmt nur die Variablenwerte und erzeugt keine Antwort.

Fordert man in Javascript nur Variablenwerte im JSON Format an, so erzeugt die URL "getvars.js" nur die JSON Ausgabe, mit dem Vorteil, das auf die SD-Card nicht zugegriffen werden muss.

Es ist auf jeden Fall empfehlenswert sich die vorhandenen Demoprogramme für den Webserver anzusehen.

Bei WEB_StartServer die Flags WEB_CACHE_HTML und WEB_CACHE_TEXT nur angeben, wenn man sich sicher ist, das HTML bzw. Text Webseiten wirklich gecached werden sollen!