Hans-Peter: Connection zu CGI Skript offen halten?

Hallo

Normalerweise sende ich Daten an ein CGI Skript. Dieses wird gestartet und verarbeitet mir dir Daten. Schlussendlich gibt dann das CGI Skript Daten an den Browser zurueck und wird beendet.

Nun moechte ich jedoch folgendes bewerkstelligen. Ich moechte eine Connection zu einem CGI Skript oeffnen und diese auch offen halten! Mein Ziel ist es nun, dass auch mein Server zu einem beliebigen Zeitpunkt ueber diese Connection an meinen Browser Daten schicken kann. Ist sowas moeglich zu realisieren? Kann mir hierzu vielleicht jemand Ressourcen empfehlen wie sowas realisiert werden kann? Order sind fuer eine solche Aufgabe andere Techniken vorgesehen?

Danke fuer hilfreiche Kommentare!

HP

  1. 你好 Hans,

    Nun moechte ich jedoch folgendes bewerkstelligen. Ich moechte eine
    Connection zu einem CGI Skript oeffnen und diese auch offen halten!
    Mein Ziel ist es nun, dass auch mein Server zu einem beliebigen
    Zeitpunkt ueber diese Connection an meinen Browser Daten schicken kann.
    Ist sowas moeglich zu realisieren?

    Nein, es ist nicht möglich. Bzw. möglich ist alles, aber der Sinn sei
    dahingestellt.

    Kann mir hierzu vielleicht jemand Ressourcen empfehlen wie sowas
    realisiert werden kann? Order sind fuer eine solche Aufgabe andere
    Techniken vorgesehen?

    Für eine solche Aufgabe benötigst du ein anderes, verbindungs-orientiertes
    Protokoll. HTTP ist Request-basierend, das ist dafür nicht geeignet. Du
    könntest z. B. einen Dämon bauen und den auf einem bestimmten TCP/IP-Port
    horchen lassen. Dein Client-Programm kann sich nun jederzeit zu diesem
    Dämon verbinden und mit ihm über ein von dir festgelegtes (und vielleicht
    sogar entworfenes) Protokoll kommunizieren.

    再见,
     克里斯蒂安

    --
    Bruce Lee, der Meister | Neues Design im Thema
    So, wie ein Teil ist, ist das Ganze.
    http://wwwtech.de/
    1. Kann mir hierzu vielleicht jemand Ressourcen empfehlen wie sowas
      realisiert werden kann? Order sind fuer eine solche Aufgabe andere
      Techniken vorgesehen?

      Für eine solche Aufgabe benötigst du ein anderes, verbindungs-orientiertes
      Protokoll. HTTP ist Request-basierend, das ist dafür nicht geeignet. Du
      könntest z. B. einen Dämon bauen und den auf einem bestimmten TCP/IP-Port
      horchen lassen. Dein Client-Programm kann sich nun jederzeit zu diesem
      Dämon verbinden und mit ihm über ein von dir festgelegtes (und vielleicht
      sogar entworfenes) Protokoll kommunizieren.

      Danke fuer Deine Antwort. Haettest du vielleicht eine gute online Ressource wo erklaert wird wie man so ein Problem loesen kann? D.h. hier komme ich mit so einfach Sachen wie Javascript nicht mehr aus! Muss hier auf Java zurueckgreifen sehe ich das richtig?

      Bin fuer jeden Tip dankbar
      Gruss Hans Peter

      1. PS: Laut http://www.contentmanager.de/magazin/artikel_553_das_hypertext_transfer_protocol.html
        kann eine HTTP Verbindung doch auch offen gehalten werden, bis sie explizit geschlossen wird.

        Ich zitiere:

        GET / HTTP 1.1
        Accept: image/gif, image/x-xbitmap, image/jpeg, */*
        Accept-Language: en-us
        Accept-Encoding: gzip, deflate
        User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT)
        Host: mydomain.docuverse.de
        Connection: Keep-Alive

        Die erste Zeile des Requests fordert vom Server ein Dokument an, das im Pfad / liegt. HTTP/1.1 wird als die Version des Protokolls angegeben, die der Browser verwendet. Die folgenden so genannten Header informieren den Server darüber, welche Art von Dokumenten vom Client akzeptiert werden, welche Sprache bevorzugt wird und welche serverseitigen Komprimierungen vom Browser wieder dekomprimiert werden können. Es folgt eine "Selbstauskunft" des Browsers und eine Angabe über den Hostname des Clients, die bei HTTP 1.1 Pflicht ist. Da der Server mehrere Hostnamen besitzen kann, gibt der Client hier an, welcher Hostname gemeint ist. Der Request wird abgeschlossen durch einen Connection-Header, der angibt, dass die TCP-Verbindung offen gehalten werden soll, bis der Abbau explizit gefordert wird.

        1. 你好 Hans,

          PS: Laut http://www.contentmanager.de/magazin/artikel_553_das_hypertext_transfer_protocol.html
          kann eine HTTP Verbindung doch auch offen gehalten werden, bis sie
          explizit geschlossen wird.

          Prinzipiell ist das richtig. Aber das CGI-Script kann trotzdem nicht
          einfach senden, wann es lustig ist. Entweder, es muss ein
          Content-Length-Header angegeben werden (in dem Fall ist genau definiert,
          wieviel du senden darfst) oder es wird Transfer-Encoding: chunked benutzt
          oder es kann kein Connect: keep-alive verwendet werden.

          Bei Transfer-Encoding: chunked ist zwar nicht genau definiert, wieviel du
          senden willst, aber dafür schlägt der Server dein Script nach einer
          definierten Zeit tot oder der Browser trennt die Verbindung, weil sie
          denken, dass das Script sich aufgehangen hat. HTTP ist eben ein
          Request-orientiertes Protokoll. Für solche Aufgaben einfach nicht geeignet.

          再见,
           克里斯蒂安

          --
          Bruce Lee, der Meister | Neues Design im Thema
          <zentrum> wie war noch mal die option in make.conf fuer das benutzen von pipes um das compile zu beschluenigen?
          <CK1> CFLAGS="-pipe"
          <torsten> Oder man frage einen Gentooer seiner Wahl, wie man 2 km Compilerswitches fuer seine CPU hinbekommt ;)
          http://wwwtech.de/
  2. Hallo Hans-Peter,

    ich weiß leider nicht, was genau du realisieren möchtest, aber
    vielleicht könnte auch FastCGI, mod_perl, mod_php oder ähnliches
    in Kombination mit einem Cookie und einem http-equiv="refresh"
    eine Lösung für dich sein.

    Greez,
    opi

    --
    Selfcode: ie:( fl:( br:^ va:) ls:] fo:) rl:( n4:? ss:| de:] ch:? mo:|