Thorsten Wurm: CGI - Script ausführen solange Butten gedrückt ist

Hallo,

ich habe eine Frage zu der Ausführung von CGI-Scripts.
Ich habe einen TP-Link WR703n Router, auf dem OPENWRT läuft.
Diesen nutze ich als Webserver. Mit einem Android-Tablet greife ich auf diesen Webserver zu. Auf der Webseite habe ich ein paar Buttons, die bei Betätigung etwas auf der seriellen Schnittstelle des Routers ausgeben.
Dies funktioniert über ein CGI-Script.
Nun muss ich das aus Sicherheitsgründen ändern, so dass kontinuierlich das CGI-Script ausgeführt wird, solange der Button gedrückt ist (Hangt ne Maschine dran, die dann Bewegungen ausführt).
Nun zu meinem Problem: Wenn ich das CGI-Script nun immer wieder aufrufe und nur die Ausgabe mache kommt nach einiger Zeit die Fehlermeldung: "the cgi process did not produce any response". Baue ich hier noch eine Rückmeldung ein, wird eine leere Webseite über meine Seite mit den Buttons gelegt und es ist keine Bedienung mit den Buttons mehr möglich.

Gibt es eine Möglichkeit, ein CGI-Script mehrfach hintereinander aufzurufen ohne irgendeine Rückmeldung zu bekommen?

Mfg,
Thorsten

  1. Hi,

    Nun muss ich das aus Sicherheitsgründen ändern, so dass kontinuierlich das CGI-Script ausgeführt wird, solange der Button gedrückt ist (Hangt ne Maschine dran, die dann Bewegungen ausführt).

    kontinuierlich im eigentlichen Sinn geht im HTTP-Kontext nicht, höchstens in kurzen Abständen immer wieder. Das ist es ja anscheinend auch, was du machst.

    Nun zu meinem Problem: Wenn ich das CGI-Script nun immer wieder aufrufe und nur die Ausgabe mache kommt nach einiger Zeit die Fehlermeldung: "the cgi process did not produce any response".

    Wer erzeugt diese Fehlermeldung? - Nicht dass das wirklich eine Rolle spielt, denn ... HTTP ist eigentlich recht simpel: Auf jeden Request hat ein Response zu folgen. Wenn der Server "nichts zu sagen hat", soll er bitteschön mit HTTP-Status 204 (No Content) antworten. Das ist so, als wenn du jemandem was erzählst, und der nickt ab und zu oder macht wenigstens "M-hm". Solange aber *gar keine* Rückmeldung kommt, ist was faul, und der Client wird auf die ausstehenden Antworten bis zum Sankt-Nimmerleins-Tag warten. Oder bis gnädigerweise ein Timeout anspricht.

    Baue ich hier noch eine Rückmeldung ein, wird eine leere Webseite über meine Seite mit den Buttons gelegt und es ist keine Bedienung mit den Buttons mehr möglich.

    Natürlich, dann wird das ursprünglich geladene Dokument im Browser durch das neue ersetzt. Um das zu vermeiden, möchtest du ja einen 204er-Status als Antwort geben.

    So long,
     Martin

    --
    Alkohl ist ungesund,
    Rauchen ist schädlich,
    Sex ist unanständig
    - und die Erde ist eine flache Scheibe.
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
  2. Hallo Thorsten,

    Gibt es eine Möglichkeit, ein CGI-Script mehrfach hintereinander aufzurufen ohne irgendeine Rückmeldung zu bekommen?

    Du kannst deine Anfrage an das CGI-Script mittels JavaScript auch per AJAX an den Webserver senden. Dadurch wird die eigentliche Seite nicht neu geladen, und die Rückmeldung kannst Du theoretisch noch per JavaScript auswerten.

    Herzliche Grüße aus Ellhofen
    Helmut Weber

    --
    -------------------------------------------
    Mode ist eine Variable, Stil eine Konstante
    1. Hallo,

      vielleicht hab ich das Problem ja nicht richtig verstanden, aber möglicherweise wird sorum ein Schuh draus: Beim Drücken des Buttons wird ein Prozess in einer Schleife gestartet. Beim Loslassen wird ein neuer Prozess gestartet, der die Scheleife beendet.

      Viele Grüße
      Siri

      1. Hallo,

        vielleicht hab ich das Problem ja nicht richtig verstanden, aber möglicherweise wird sorum ein Schuh draus: Beim Drücken des Buttons wird ein Prozess in einer Schleife gestartet. Beim Loslassen wird ein neuer Prozess gestartet, der die Scheleife beendet.

        Okay, dann belege den Button am Besten mit zwei Events:

        • onmousedown="startProcess()"
        • onmouseup="stopProcess()"

        In den beiden JavaScript-Funktionen kann man dann (per AJAX) die entsprechende URL für das CGI-Skkript aufrufen.

        Herzliche Grüße aus Ellhofen
        Helmut Weber

        --
        -------------------------------------------
        Mode ist eine Variable, Stil eine Konstante