Temperaturverlauf/Pushchart mit eingeschränktem embedded Server
Marius
- programmiertechnik
0 Jurik0 Marius
0 Sven Rautenberg
Hallo,
ich habe einen embedded Webserver mit dem ich einen gemessenen Temperaturverlauf grafisch darstellen will.
Der Webserver kann nun leider nicht wie ein "richtiger" Server große Dateien in einzelne Pakete splitten und mit der sequencenr. abschicken, sondern nur ein einziges Paket mit der TCP-typischen Daten-Nutzlast von ~1,5Kb je request des Clients.
Der Grund hierfür sind die begrenzten Ressourcen des Mikrocontrollers, der Stack soll möglichst wenig Platz einnehmen.
Meine Frage lautet nun, mit welcher Programmiertechnik ich diese Beschränkung aushebeln kann und möglichst ansehnliche Verläufe erstelle.
Die einzige mir bekannte Möglichkeit sind Frames. Wird eine Seite aufgerufen, sendet der Client jeweils eine Anfrage für jeden fehlenden Frame, die der Controller auswerten kann und daraufhin weitere Daten nachschiebt.
Gruß
Marius
Google mal nach AJAX... wobei Prototype mit 124kb evtl. schon etwas zu groß ist. Würde aber sonst einiges im JS Quellcode verkürzen.
Aber für Ajax brauchste das nicht wirklich. Nur so könntest du sehr dynamisch Sachen von deinem Micro-Server laden ohne die größe von 1,5kb zu überschreiten.
Das nenn ich mal eine Herausforderung! Kannst du uns auf dem laufenden halten?
Viele Grüße,
Jurik
PS: Bedenke, es klappt nicht Javascript auf einen anderen Server auszulagern und per Ajax nur die relevanten Daten von deinem Server zu holen. Ajax klappt nur auf dem gleichen Server.
Google mal nach AJAX... wobei Prototype mit 124kb evtl. schon etwas zu groß ist. Würde aber sonst einiges im JS Quellcode verkürzen.
Von AJAX hab ich auch gelesen und das könnt durchaus sein was ich suche. Aber da ich noch nicht lange Webseiten programmiere muss ich mich erstmal reinlesen. Danke für die Links (OK, zugegeben, Wikip. hab ich bereits gefunden ^^)!
Aber für Ajax brauchste das nicht wirklich. Nur so könntest du sehr dynamisch Sachen von deinem Micro-Server laden ohne die größe von 1,5kb zu überschreiten.
Das nenn ich mal eine Herausforderung! Kannst du uns auf dem laufenden halten?
Ja, kann ich. Zuerst beschäftige ich mich jetzt näher mit AJAX und hoffe nebenbei noch auf einen weiteren guten Rat hier im Forum.
PS: Bedenke, es klappt nicht Javascript auf einen anderen Server auszulagern und per Ajax nur die relevanten Daten von deinem Server zu holen. Ajax klappt nur auf dem gleichen Server.
Mein Ziel ist eine standalone-Anwendung die unabhängig von anderen Servern funktionieren soll. Das kommt sowieso nicht in Frage.
Kann mir jemand verraten wie in den Header eingebundene *.js-Dateien vom Browser geholt werden? Würd mir die Recherche mit Wireshark gern ersparen.
Gruß und vielen Dank für die Antwort Jurik
Marius
Moin!
ich habe einen embedded Webserver mit dem ich einen gemessenen Temperaturverlauf grafisch darstellen will.
Der Webserver kann nun leider nicht wie ein "richtiger" Server große Dateien in einzelne Pakete splitten und mit der sequencenr. abschicken, sondern nur ein einziges Paket mit der TCP-typischen Daten-Nutzlast von ~1,5Kb je request des Clients.
Das ist schlecht. Selbst wenn man serverseitig nur absolutes Minimal-HTTP spricht, gehen doch mindestens mal so 100 Byte für einen anständigen HTTP-Header drauf und lassen somit nur noch knapp 1400 Byte für Nutzdaten. Ich glaube kaum, dass man mit so wenig Nutzdaten eine vollständig eigenständige Weboberfläche zaubern kann.
Der Grund hierfür sind die begrenzten Ressourcen des Mikrocontrollers, der Stack soll möglichst wenig Platz einnehmen.
Wenn man den Äußerungen von fd0 (http://www.lochraster.org/) Glauben schenkt, dann ist so ein Problem zwar da, aber nicht unlösbar. Er behauptet nämlich, dass man mit Microcontrollern tatsächlich TCP/IP und HTTP machen kann. Seine Taktik für sein Etherrape: Der Webserver reicht große statische Seitenstrukturen nur durch, die in einem Flash-ROM gespeichert sind (die sind logischerweise u.U. größer, als ein Ethernet-Frame), und alles dynamische (wie z.B. Meßwerte) wird per Ajax ausgeliefert und vom Client verarbeitet/animiert/dargestellt.
Meine Frage lautet nun, mit welcher Programmiertechnik ich diese Beschränkung aushebeln kann und möglichst ansehnliche Verläufe erstelle.
Die einzige mir bekannte Möglichkeit sind Frames. Wird eine Seite aufgerufen, sendet der Client jeweils eine Anfrage für jeden fehlenden Frame, die der Controller auswerten kann und daraufhin weitere Daten nachschiebt.
Das kleinere Problem dürfte wohl sein, dein Embedded-Device dazu zu überreden, größere Ressourcen auszuliefern. Das größere Problem ist, clientseitig die ganze Arbeit mit Javascript zu leisten, zu der das Device nur statische Inhalte sowie per Ajax dynamisch Meßwerte hinzufügt.
Die schlauere, aber natürlich deutlich abhängigere Methode ist, das Device von einem zweiten, leistungsfähigeren Server aus abzufragen, und dort dann die ganze Arbeit zu erledigen.
Denn das Generieren von netten Grafiken mittels Javascript ist auch nicht so simpel - vor allem, wenn dein persönlicher Wissensstand bei Frames stehengeblieben ist. :)
- Sven Rautenberg