Martin: Server Push

Hi !

wie ist es möglich per Server Push Modus (über CGI (Perl oder noch besser PHP)) eine Textdatei automatisch "neuzuladen" ...
Dieses Feature wird auf keiner Website im Internet, die ich per google.com gefunden habe veranschaulicht, ich brauche dies allerdings für einen kleinen, privaten Chat.

Wäre für jede schnelle Hilfe dankbar :D

mfg
Martin G.

  1. Hi,

    wie ist es möglich per Server Push Modus (über CGI (Perl oder noch besser PHP)) eine Textdatei automatisch "neuzuladen" ...
    Dieses Feature wird auf keiner Website im Internet, die ich per google.com gefunden habe veranschaulicht, ich brauche dies allerdings für einen kleinen, privaten Chat.

    waere das nicht was fuer ein Meta-Tag, also einem Pull-Abo durch den Browserclient?

    Gruss,
    Lude

    1. waere das nicht was fuer ein Meta-Tag, also einem Pull-Abo durch den Browserclient?

      nein, nix meta-tag.

      http://wp.netscape.com/assist/net_sites/pushpull.html

      1. Hi,

        waere das nicht was fuer ein Meta-Tag, also einem Pull-Abo durch den Browserclient?

        nein, nix meta-tag.

        http://wp.netscape.com/assist/net_sites/pushpull.html

        unter http ist ein Server-Pushabbo Richtung Webbrowserclient nicht moeglich.

        Gruss,
        Lude

  2. Moin!

    wie ist es möglich per Server Push Modus (über CGI (Perl oder noch besser PHP)) eine Textdatei automatisch "neuzuladen" ...

    Gar nicht!

    Netscape hatte mal solch ein Feature entwickelt und in die eigenen Browser eingebaut, aber es ist niemals Standard geworden, sondern nur experimentell geblieben. Nach meinen Tests ist das Feature im Netscape 3 vorhanden (frühere Versionen habe ich nicht getestet), im Netscape 4 aber schon nicht mehr.

    Andere Browser wie IE oder Opera haben niemals dieses Feature gekannt.

    Dieses Feature wird auf keiner Website im Internet, die ich per google.com gefunden habe veranschaulicht, ich brauche dies allerdings für einen kleinen, privaten Chat.

    HTTP ist das falsche Protokoll für einen Chat. Der Browser muß ständig beim Server nachfragen, ob es neue Informationen gibt - das ist ziemlich nervig und belastend für den Server, weil es meist nichts neues gibt, und es ist blöd für den User, weil der ständig seine Leitung mit sinnlosen Anfragen belegt.

    Es gibt besseres: IRC ist ein schönes Chatprotokoll - wenn du das, ohne dass jemand einen Client erst herunterladen und installieren muß, auf deiner einbinden willst: Es gibt viele schöne Java-Clients, die direkt zu einem IRC-Server verbinden und dann alle Vorteile des Protokolls nutzen.

    - Sven Rautenberg

    --
    ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|
    1. woher kommt dann bei einigen metasuchmaschinen der effekt, das ohne "flackern", also scheinbar ohne neuladen der seite erst der hinweis auf die laufende suche und dann in zeitlichen abständen anstattdessen die einzelnen ergebnisse eintrudeln?

      und wie funktioniert dann phpirc?
      wenn der blaue ladebalken im ie nicht zum ende kommt und das wörtchen "fertig" unten links nicht erscheint, dann wird doch scheinbar die verbindung aufrecht erhalten, oder?

      1. Moin!

        woher kommt dann bei einigen metasuchmaschinen der effekt, das ohne "flackern", also scheinbar ohne neuladen der seite erst der hinweis auf die laufende suche und dann in zeitlichen abständen anstattdessen die einzelnen ergebnisse eintrudeln?

        Da werden die Ergebnisse nacheinander schon mal zum Browser geschickt, die Seite ist aber noch nicht fertig und die Verbindung wird nicht beendet.

        Diesen Effekt kann dir jederzeit ein beliebiger, cachender Proxy auf der Strecke von Browser zu Server kaputtmachen. Es ist nichts, auf das man sich verlassen kann.

        und wie funktioniert dann phpirc?

        Schlecht, würde ich sagen. :)

        wenn der blaue ladebalken im ie nicht zum ende kommt und das wörtchen "fertig" unten links nicht erscheint, dann wird doch scheinbar die verbindung aufrecht erhalten, oder?

        Das ist aber nicht wirklich Sinn der Sache. Der Prozess auf dem Server, der die Verbindung offenhält, muß dazu ewig weiterlaufen. Das kann vom Serverbetreiber aber eingeschränkt werden. PHP-Skripte laufen beispielsweise nur begrenzt, z.B. 30 Sekunden. Das ist sinnvoll, falls ein Skript mal eine Endlosschleife ausführt.

        Ein weiterer Nachteil dieser Taktik: Man kann nur unten an die Seite was anfügen. Natürlich kann man versuchen, mit viel Aufwand und Javascript sowie Frames das für den Benutzer anders aussehen zu lassen, aber Tatsache ist einfach, dass HTTP kein Server-Push-Protokoll ist, sondern ein Client-Pull-Protokoll. Alle Versuche, das server- wie clientseitig umzubiegen, sind grausam, schrecklich und wider die Natur von HTTP. Man sollte es lassen.

        - Sven Rautenberg

        --
        ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|
        1. Hi :D !

          Diesen Effekt kann dir jederzeit ein beliebiger, cachender Proxy auf der Strecke von Browser zu Server kaputtmachen. Es ist nichts, auf das man sich verlassen kann.

          [...]
          »»PHP-Skripte laufen beispielsweise nur begrenzt, z.B. 30 Sekunden. Das ist sinnvoll, falls ein Skript mal eine Endlosschleife ausführt.

          Also Proxys sind mir zwar nicht egal, aber ich konzentriere mich vorerst auf direkte Verbindungen. Außerdem kann ich nebenbei ja einfach nen Client Pull Modus als Alternative einbauen. Oder sogar eine Java Alternative... Aber von Java habe ich Null, wirklich null Ahnung und deshalb lass ich das lieber mal vorerst.....

          Und die Endlosschleife ist ja mit Hilfe einer Timeout Verstellung auch kein Problem.

          mfg
          Martin G.

  3. Hallo, Martin,

    wie ist es möglich per Server Push Modus (über CGI (Perl oder noch besser PHP)) eine Textdatei automatisch "neuzuladen" ...

    unabhängig von der Frage, ob die Verwendung der Push-Funktion sinnvoll ist, hier mal ein Link zu einem entsprechenden Script ...

    http://www.harlequin.ch/technologien/tools/php.php bzw.
    http://www.harlequin.ch/technologien/tools/search.ch.phps

    Das Sitellite Content Management System arbeitet auch damit (s.u.).

    Grüße,

    Sebastian

    ---------- ServerPush.php ----------

    <?php
    //
    // +----------------------------------------------------------------------+
    // | Sitellite - Content Management System                                |
    // +----------------------------------------------------------------------+
    // | Copyright (c) 2001 Simian Systems                                    |
    // +----------------------------------------------------------------------+
    // | This software is released under the Simian Open Software License.    |
    // | Please see the accompanying file OPENLICENSE for licensing details!  |
    // |                                                                      |
    // | You should have received a copy of the Simian Open Software License  |
    // | along with this program; if not, write to Simian Systems,            |
    // | 101-314 Broadway, Winnipeg, MB, R3C 0S7, CANADA.  The Simian         |
    // | Public License is also available at the following web site           |
    // | address: http://www.simian.ca/license.php                          |
    // +----------------------------------------------------------------------+
    // | Authors: John Luxford lux@simian.ca                                |
    // +----------------------------------------------------------------------+
    //
    // ServerPush is a class that implements Netscape's HTTP server push
    // functionality, allowing incremental data to be presented to the
    // visitor.
    //

    /*!

    <package name="CGI.ServerPush">

    <class name="ServerPush"
       access="public"
       date="2002-08-23 23:19:00"
       version="1.0">

    <author name="John Luxford"
        email="lux@simian.ca"
        url="http://www.simian.ca/" />

    <summary>ServerPush is a class that implements Netscape's HTTP server push
    functionality, allowing incremental data to be presented to the
    visitor.

    Please note that if you are using this class for progress meter-like
    purposes, for the sake of your bandwidth and for your users, do not
    send a message for each item being counted, instead wrap something like
    this around it:

    if ($total > 1000 && $sent % floor ($total / 25) == 0) {
     $spush->send ('...', true);
    }</summary>

    <example>$spush = new ServerPush ('replace');

    // display the message "Hello, how are you today?" one word at a time
    // with a two second delay between words.
    $spush->rotate (array (
     'Hello,',
     'how',
     'are',
     'you',
     'today?',
    ), 2);</example> !*/

    class ServerPush {
     /*! <property name="key" access="public" type="string">
     <summary>The unique key used to separate pushed data blocks.  This
     value is generated on the fly for you.</summary>
     </property> !*/
     var $key;

    /*! <property name="contentType" access="public" type="string">
     <summary>The HTTP content type of the pushed document.  This can
     be either multipart/mixed or multipart/x-mixed-replace, depending
     on what you tell the constructor method.</summary>
     </property> !*/
     var $contentType;

    /*! <method name="ServerPush" access="public">
     <summary>Constructor method.  $type can be either 'mixed', or 'replace'.</summary>
     <param name="type" type="string" default="mixed" />
     </method> !*/
     function ServerPush ($type = 'mixed') {
      if ($type == 'mixed') {
       $this->contentType = 'multipart/mixed';
      } else {
       $this->contentType = 'multipart/x-mixed-replace';
      }
      $this->key = md5 (time ());
      ob_implicit_flush ();
      header ('Content-type: ' . $this->contentType . '; boundary=' . $this->key);
     }

    /*! <method name="send" access="public">
     <summary>Sends a single block to the visitor.  If $more is false,
     send() calls end() when it is done.  $contentType is the content
     type for this specific block.</summary>
     <param name="data" type="string" />
     <param name="more" type="boolean" default="true" />
     <param name="contentType" type="string" default="text/html" />
     </method> !*/
     function send ($data, $more = true, $contentType = 'text/html') {
      echo "\n--" . $this->key . "\n";
      echo 'Content-type: ' . $contentType . "\n\n";
      echo $data . "\n";
      if (! $more) {
       $this->end ();
      }
     }

    /*! <method name="end" access="public">
     <summary>Prints a closing key string, ending the transmission.</summary>
     </method> !*/
     function end () {
      echo "\n--" . $this->key . "--\n";
     }

    /*! <method name="rotate" access="public">
     <summary>Sends a list of blocks with a delay of $sleep seconds
     between them.  This is the way web sites used to create basic
     animations back in the early days of the web, even before
     animated GIFs.  $data is an associative array where the keys
     are the content type of the data value.  If no content type
     is specified (ie. the array is not associative), then the
     content type will default to text/html.</summary>
     <param name="data" type="associative array" />
     <param name="sleep" type="integer" default="1" />
     </method> !*/
     function rotate ($data, $sleep = 1) {
      foreach ($data as $contentType => $d) {
       if (is_numeric ($contentType)) {
        $contentType = 'text/html';
       }
       $this->send ($d, true, $contentType);
       sleep ($sleep);
      }
      $this->end ();
     }
    }

    /*! </class>

    </package> !*/

    ?>

    1. Moin!

      unabhängig von der Frage, ob die Verwendung der Push-Funktion sinnvoll ist, hier mal ein Link zu einem entsprechenden Script ...

      http://www.harlequin.ch/technologien/tools/php.php bzw.
      http://www.harlequin.ch/technologien/tools/search.ch.phps

      Der Mime-Typ multipart/x-mixed-replace ist eindeutig als experimentell zu erkennen und funktioniert nach meinen Erkenntnissen nur im Netscape 3 - also in weniger als 0,1% aller im Web anzutreffenden Browser. Folglich ist es schwachsinnig, für ernsthafte Anwendungen auch nur ein Byte an Skript darauf zu verschwenden.

      Tatsächlich ist es sogar schädlich, Ressourcen mit "multipart/x-mixed-replace" auszuliefern - Browser müssen diesen Mime-Typ nicht verstehen und werden dann lieber gar nichts anzeigen, wie Opera es zum Beispiel tut. Und es ist auch kaum damit zu rechnen, dass diese längst begrabene Technik es doch noch irgendwann zu einer nennenswerten Verbreitung schafft - dazu müßten alle existierenden Browser durch neue Versionen ersetzt werden. Und wir alle wissen ja, wie hartnäckig sich Netscape 4 noch hält...

      PS: Was hat das search-Skript mit Server-Push zu tun?

      - Sven Rautenberg

      --
      ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|
      1. Moin!

        das Thema, ob die gaze Sache sinnvoll ist, habe ich bewußt ausgeklammert - und da vertraue ich auch Deiner kompetenz bzw. Deinem Urteilvermögen.

        PS: Was hat das search-Skript mit Server-Push zu tun?

        Nichts, wie mir jetzt auffällt - ich hatte den falschen Link auf der erstgenannten Seite einfach übernommen ...

        Siehe auch http://www.gtchat.de/push_pull.html.

        Grüße,

        Sebastian

        1. Hi !

          Siehe auch http://www.gtchat.de/push_pull.html.

          Hehe, der gtchat ist zufälligerweise mein 'großes' Vorbild. Allerdings ist der Code nicht offengelegt und die Entschlüsselung, welche durchaus möglich ist, ist mir 1. zu aufwendig und 2. ist es dem Programmierer gegenüber nicht fair....

          Übrigens: Diese ServerPush Technologie wird in etlichen Chats von Worldweb (einer der größten deutschen Chatanbieter) verwendet und funktioniert mit dem Netscape 3.0, 4.x, 6.x (Mozilla ab 0.7) und dem Internet Explorer ab 4.0... Des Weiteren habe ich auch schon Opera 5.11 damit getestet und alles hat prima geklappt.... Der einzigste Browser der damit anscheinend nicht gescheit umgehen kann scheint der Konqueror zu sein und der Safari. Die haben einfach nur nen weißen Hintergrund im Ausgabefenster angezeigt.....

          mfg
          Martin

          p.s. Ich kann hier im Thread wahrscheinlich erst ab heute Abend richtig antworten, da ich bei meinen Großeltern bin und nicht genau weiß, ob mein Opa mich an den Computer lässt *fg*

          1. Auf der Page steht doch...:

            Es gibt eine Übertragungstechnik, die ausschließlich von Netscape implementiert ist, die als Server Push bezeichnet wird. Sie wird von GTChat nicht verwendet. Stattdessen macht sich GTChat die Eigenschaft aller verbreiteten Browser zunutze, daß auch teilweise übertragene Seiten schon angezeigt werden. Der Chat schließt die HTTP-Verbindung nicht, sondern überträgt die Textzeilen, sobald sie am Server ankommen. Damit hat man minimale Verzögerung und Transfervolumen.

            mfg
            Michael

            PS: hab mich lang mit dem Thema beschäftigt und Sven hat recht - Es ist _unbrauchbar_!

            1. PS: hab mich lang mit dem Thema beschäftigt und Sven hat recht - Es ist _unbrauchbar_!

              Wenn es unbrauchbar und so inkompatibel ist, frage ich mich dennoch aus welchem Grunde z.B. worldweb gerade voll auf diese Technik, schon seit 1997, setzt. :/

              mfg
              Martin G.

              1. Hi!

                PS: hab mich lang mit dem Thema beschäftigt und Sven hat recht - Es ist _unbrauchbar_!

                Wenn es unbrauchbar und so inkompatibel ist, frage ich mich dennoch aus welchem Grunde z.B. worldweb gerade voll auf diese Technik, schon seit 1997, setzt. :/

                Vermutlich aus demselben Grund warum Karl-Egon Müller aus Dresden noch heute auf seinen Trabant setzt, und nicht auf Mercedes oder VW, und das schon seit unglaublichen 27 Jahren!

                Grüße
                Andreas

              2. Wenn es unbrauchbar und so inkompatibel ist, frage ich mich dennoch aus welchem Grunde z.B. worldweb gerade voll auf diese Technik, schon seit 1997, setzt. :/

                worldweb?

                z.B.? gibts da noch andere Seiten, die Server-Push einsetzen? (nicht die Art von Server-Push, welche der oben erwähnte Chat einsetzt.. das hat ja wie schon gesagt nicht wirklich was mit Server-Push zu tun!

                mfg
                Michael

                1. das hat ja wie schon gesagt nicht wirklich was mit Server-Push zu tun!

                  Nein, überhaupt nicht. Beim gtchat wird es sogar noch schön erläutert und die worldweb Chatsoftware, die nun wirklich jeder, der sich informiert hat, kennen sollte, basiert höchstwahrscheinlich auf dem gtchat.....

                  1. Moin!

                    Nein, überhaupt nicht. Beim gtchat wird es sogar noch schön erläutert und die worldweb Chatsoftware, die nun wirklich jeder, der sich informiert hat, kennen sollte, basiert höchstwahrscheinlich auf dem gtchat.....

                    worldweb will Geld für einen Chatbrowser haben - klar, mit einer eigenen Applikation kann man natürlich einen von allen HTTP-Beschränkungen freien Chat machen. Ist mit IRC-Clients aber genauso.

                    Und gtchat ist nur Freeware, nicht Open Source.

                    Da nehme ich im Zweifel dann doch lieber etwas, was dem Benutzer die Freiheit des Clients läßt, wenn er das Java-Applet nicht will. :)

                    - Sven Rautenberg

                    --
                    ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|
                    1. Moin!

                      Nein, überhaupt nicht. Beim gtchat wird es sogar noch schön erläutert und die worldweb Chatsoftware, die nun wirklich jeder, der sich informiert hat, kennen sollte, basiert höchstwahrscheinlich auf dem gtchat.....

                      worldweb will Geld für einen Chatbrowser haben - klar, mit einer eigenen Applikation kann man natürlich einen von allen HTTP-Beschränkungen freien Chat machen. Ist mit IRC-Clients aber

                      jaaa.... der chatbrowser ist erst seit anfang mai oder anfang juni neu dabei..... der basiert ebenfalls nur auf dem http-protokoll und am chat selbst über den browser hat sich nichts verändert. achja, dieser chatbrowser ist nur ein aufgesetzter internet explorer *rofl* das war die größte scheiße, die die jemals erfunden haben ...

                      mfg
                      Martin

  4. Hi, Martin,

    Du kannst ja mal schaun, ob sich die in diesen Artikeln genannten Methoden für einen Chat verwenden lassen ...

    Remote scripting with javascript
    http://www.dotvoid.com/article.php?itemID=9

    Remote Scripting With JavaScript and ASP
    http://www.devarticles.com/art/1/99

    Grüße,

    Sebastian

    1. Hi, Martin,

      und noch ein Link ...

      http://www.ashleyit.com/rs/main.htm

      Grüße,

      Sebastian