Ben Romberg: Perl unterbrechen

Hallo Leute,
ich weiß ja nicht, ob ich einfach nur zu blöd bin, aber ich habe seit mittlerweile einem knappen Jahr Perl-Erfahrung noch keine Funktion entdeckt, die Perl einen Aussetzer verpasst. Was ich meine ist folgendes:

Ich würde gerne einen HTML-Chat programmieren, der dadurch nicht abbricht, indem er jede Sekunde ein Zeichen sendet (z.B. Leerzeichen). Dadurch wird quasi ständig eine HTML-Seite vom Browser geladen, die nie fertig geladen wird, wodurch neu geschriebene Beiträge sofort erscheinen. Wie bekomme ich das Skript nun dazu (ohne for-Schleifen, die bis 100000 hochzählen oder derartige Sachen) mal 'ne Sekunde zu warten bis er ein neues Zeichen sendet?

Bin um jeden Hinweis dankbar!

Thx,
Ben

  1. Hallo Leute,
    ich weiß ja nicht, ob ich einfach nur zu blöd bin, aber ich habe seit mittlerweile einem knappen Jahr Perl-Erfahrung noch keine Funktion entdeckt, die Perl einen Aussetzer verpasst. Was ich meine ist folgendes:

    Ich würde gerne einen HTML-Chat programmieren, der dadurch nicht abbricht, indem er jede Sekunde ein Zeichen sendet (z.B. Leerzeichen).

    ebenfalls hallo,

    was du machen möchtest, haben schon ein paar probiert, aber es geht leider mit Perl gar nicht. Wenn du ein Chat-Programm schreiben willst, nimm C/C++ dazu oder Java.
    Perl ist darauf angewiesen, eine Seite bei jedem neuen Eintrag eben auch neu in den Browser zu laden, sonst siehst du ja nicht, was deine Chatter schreiben. Und das ist das zentrale "Problem" dabei.

    Christoph S.

    1. Thx für deine Antwort,
      habe das schonmal mit PHP3 gesehen (auf gratis.de, die Site funzt nicht mehr, hat prima funktioniert). Dann dürfte es doch eigentlich auch mit Perl gehen, oder?

      Ich will ja nicht, dass der Browser durch ein EOF aufhört zu laden, sondern jede Sekunde mit einem Zeichen "gefüttert" wird (um in kein Timeout zu gelangen). Wenn das Skript (durch Speichern der Chat-Beiträge in 'nem File) was neues findet wird das anstatt dem Leerzeichen gesendet.

      *gibt nicht auf*
      Ben

      ebenfalls hallo,

      was du machen möchtest, haben schon ein paar probiert, aber es geht leider mit Perl gar nicht. Wenn du ein Chat-Programm schreiben willst, nimm C/C++ dazu oder Java.
      Perl ist darauf angewiesen, eine Seite bei jedem neuen Eintrag eben auch neu in den Browser zu laden, sonst siehst du ja nicht, was deine Chatter schreiben. Und das ist das zentrale "Problem" dabei.

      Christoph S.

      1. Hi,

        habe das schonmal mit PHP3 gesehen (auf gratis.de, die Site funzt nicht mehr, hat prima funktioniert). Dann dürfte es doch eigentlich auch mit Perl gehen, oder?

        *gibt nicht auf*

        was Du ungefähr suchst, nennt sich m. E. "server push".

        Ich erinnere mich an Threads dazu im Archiv (ich
        glaube, man muß die CGI-Skripte für den Apache mit
        einem bestimmten Präfix benennen), habe aber keine
        Details zur Hand.

        mfG - Michael

        1. Ich erinnere mich an Threads dazu im Archiv (ich
          glaube, man muß die CGI-Skripte für den Apache mit
          einem bestimmten Präfix benennen), habe aber keine
          Details zur Hand.

          hi,

          ich hab sowas auch in Erinnerung. Aber was machst du nun, wenn du das Script NICHT über den Apache laufen lassen willst, sondern z.B. über NT ??
          Ich gebe gern zu, daß ich auch schonmal an einem Chatscript gebastelt habe, und genau an der gleichen Frage hängengeblieben bin. Mit Java ist es dagegen überhaupt kein Problem, auch nicht mit C++, und mit TCL kriegt mans auch hin.
          Was ich nicht genau weiß, ist, ob man eins der mit perl 5.6 neu verfügbar gewordenen Module vielleicht doch dazu nehmen kann, ich denke an perlTk. Das müßte probiert werden, Tk ist ja für kleie graphische Oberflächen ganz prima.

          Christoph S.

          1. Hallo zusammen

            Ich erinnere mich an Threads dazu im Archiv (ich
            glaube, man muß die CGI-Skripte für den Apache mit
            einem bestimmten Präfix benennen), habe aber keine
            Details zur Hand.

            Ein Präfix brauchst du nicht, nur den richtigen code.

            Mit perl kannst du das auch sehr schön machen, nur eben nicht als CGI-Script. Das ist der hacken.
            Du mußt in perl dann eben einen chatserver schreiben.

            Beispiel zu Serverpush:

            use CGI::Push qw(:standard);

            do_push(-next_page=>&next_page,
                        -last_page=>&last_page,
                        -delay=>0.5);

            sub next_page {
                    my($q,$counter) = @_;
                    return undef if $counter >= 10;
                    return start_html('Test'),
                           h1('Visible'),"\n",
                           "This page has been called ", strong($counter)," times",
                           end_html();
                  }

            sub last_page {
                     my($q,$counter) = @_;
                     return start_html('Done'),h1('Finished'),strong($counter),' iterations.',end_html;
                 }

            Näheres in der docu zu CGI.pm

            Tschüs

            Daniel

            1. Hallo Daniel,

              Ein Präfix brauchst du nicht, nur den richtigen code.

              Mit perl kannst du das auch sehr schön machen, nur eben nicht als CGI-Script. Das ist der hacken.
              Du mußt in perl dann eben einen chatserver schreiben.

              Beispiel zu Serverpush:

              [...]

              Näheres in der docu zu CGI.pm

              Das Thema beschäftigt mich auch gerade, wenn auch "nur" aus reinem Lern-Interesse. Hast Du vielleicht noch einen Bookmark oder eine Buchempfehlung auf Lager? Irgendetwas, das die Grundlagen der Geschichte "server-push" beschreibt (die eigentliche Implementierung interessierte mich dann erst später)?

              Mit Dank im Vorab

              Andy

          2. Hi,

            ich hab sowas auch in Erinnerung. Aber was machst du nun, wenn du das Script NICHT über den Apache laufen lassen willst, sondern z.B. über NT ??

            Dein Problem ist nicht existent. Apache läuft auf Windows NT (und vielen anderen Plattformen).

            mfG - Michael

            1. Dein Problem ist nicht existent. Apache läuft auf Windows NT (und vielen anderen Plattformen).

              ups  -  doch, ist existent, aber ich habs in der Eile gar nicht benannt, sorry. Ich meinte, wenn statt des Apache der IIS läuft ...

              Christoph S.

    2. was du machen möchtest, haben schon ein paar probiert, aber es geht leider mit Perl gar nicht. Wenn du ein Chat-Programm schreiben willst, nimm C/C++ dazu oder Java.
      Perl ist darauf angewiesen, eine Seite bei jedem neuen Eintrag eben auch neu in den Browser zu laden, sonst siehst du ja nicht, was deine Chatter schreiben. Und das ist das zentrale "Problem" dabei.

      Wo ist das Problem?

      ----------------------------------------
      #/usr/bin/perl -w
      ++$;
      print <<_;
      Content-Type: text/plain

      _

      my $i = 0;
      while (1) {
        ++$i;
        print $i, "\n";
        sleep 1;
      }
      -----------------------------------------

      Peter

      1. #/usr/bin/perl -w

        Das muss natuerlich

        #!/usr/bin/perl -w

        heissen (oder wie auch immer der Pfad lautet).

        Peter