Frage an die (Web-) Programmierer: Server Push ?

  • Hi zusammen,
    meine Frage hat nicht ganz was mit dem vdr zu tun, aber eventuell findet sich ja einer unter euch, der mir weiterhelfen kann.
    Für meine Haussteuerung bin ich auf ein Problem beim Aufbau einer Webseite gestossen. Kurz zum Hintergrund: der Webserver (Apache) stellt eine Seite (normales html) mit ein paar Buttons zur Verfügung, die bei Betätigung etwas auslösen (z. B. Licht einschalten o.ä.). Im Haus gibt es nun kleine Webpads (Archos 605 wifi), die standardmäßig diese Seite anzeigen.
    Diese halten die Verbindung, gehen nicht in Standby o.ä. ... schalten aber nach 30 Sekunden die Hintergrundbeleuchtung ab.


    Nun würde ich gerne bei Bedarf eine Meldung o.ä. auf den Webpads anzeigen können, was aber Servergesteuert sein soll.


    Theoretisch könnte man z.B. mittels JavaScript einen Refresh der Seite z.B. alle 5 Minuten einrichten und bei Bedarf (Meldung soll angezeigt werden) den Inhalt ändern.
    Das hat aber zur Folge, das sich alle 5 Minuten (beim refresh) meist unnötigerweise alle Bildschirme einschalten.
    Gibt es denn irgendeine Möglichkeit, das ohne Refresh einzurichten ? ... also das Webpad stellt wie gewöhnlich die Seite dar, wenn der Web-Server allerdings der Meinung ist, etwas mitteilen zu müssen, wird dies dann zum Client (Webpad) gesendet (mit refresh alle 10 Sekunden, damit das Display dann an bleibt, bis die Meldung vom Nutzer bestätigt wird)...
    Mir ist klar, das dies mit reinem http nicht umsetzbar ist, aber eventuell gibts ja Tricks, die das hinbiegen (PHP, Perl, Java, Flash ?!?).
    Im Netz hab ich bisher nicht allzuviel darüber finden können (ausser irgendwelche Chat-Software, die wohl auch eine Push-Technologie nutzt, was mir aber bei meinem Prob nicht half)...eventuell hab' ich aber auch nur falsch gesucht....
    Bin für jeden Tip dankbar


    Gruß
    rob.

    VDR1: HP-Microserver N40L mit mit yavdr 0.6 (headless) und 3 USB Empfängern (pctv 461e)
    VDR2: MacMini mit yavdr 0.6 und TT-3600 (USB)
    VDR3 - VDR5: Raspberry Pi3 mit USB Empfänger (pctv461e) und MLD

  • Wenn das Ding das XMLHttpRequest Objekt kennt, kannst du damit im Hintergrund den Server pollen ohne die angezeigte Seite neu zu laden. Am einfachsten realisiert man das, indem man den Server eine Antwort im JSON-Format liefern lässt, das kann man dann direkt mit eval() in Javascript parsen und hat ein auswertbares Objekt.

    Asrock A75 Pro4-M
    Debian wheezy (testing, stock) (aktuell 2012-08-24: Linux 3.2, VDR 1.7.28)
    vdr-sxfe (xineliboutput)
    Pioneer VSX-520-K

  • Hi zirias,


    vielen Dank für den Hinweis !!!
    Das war genau, was ich suchte. Hatte zwar bisher mit Javascript recht wenig Berührungspunkte, konnte aber mittels Suche über XMLHttpRequest und div. Infos und Tutorials darüber das Ganze recht schnell vorerst mal rudimentär implementieren....und was soll ich sagen... es läuft genau so, wie ich es mir vorgestellt habe (der Archos 605 kennt das xmlhttprequest-Objekt...da ist ein normaler Opera drauf).


    Vielen Dank nochmal


    Gruß
    rob.

    VDR1: HP-Microserver N40L mit mit yavdr 0.6 (headless) und 3 USB Empfängern (pctv 461e)
    VDR2: MacMini mit yavdr 0.6 und TT-3600 (USB)
    VDR3 - VDR5: Raspberry Pi3 mit USB Empfänger (pctv461e) und MLD

  • Das Arme-Leute-Server-Push wird normalerweise durch offenhalten der Verbindung gemacht: Der Client ruft eine Seite ab, und der Server sendet nur ein paar Zeilen HTML, und hält dann die Verbindung. Der Client lädt dann die Seite bis in alle Ewigkeit. Hat der Server was zu sagen, schickt er weitere Daten durch die Verbindung. Die Schwierigkeit liegt darin, dass natürlich kein Timeout die Verbindung kappen darf, und das ist nicht immer ganz zu vermeiden.


    Du könntest also einfach eine Meldungs-Seite durch den Client anfordern, die Auslieferung der Seite am Server aber so lange verzögern, bis tatsächlich etwas zu melden ist.


    Gruß,


    Udo

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!