Philipp Hasenfratz: flush in perl

Beitrag lesen

Halihallo Sören

Ich versuche seit einer Ewigkeit einen Webchat auf die Beine zu stellen, doch es will nicht gelingen.

Der Code unten lässt anderes vermuten. Du saugst ihn irgendwo ab...

Es scheitert daran, dass der Browser die Chatausgabe erst beim Beenden der Verbindung (also nach komplettem Laden der Seite) anzeigt.

Tja, das Problem ist nicht (korrekt) lösbar. flush() flushed nur
die Verbindung zwischen CGI-Script und Webserver. Das Puffern der
Ausgabe zwischen Webserver und HTTP-Client oder Proxi, oder was
auch immer noch dazuwischen steht, kannst du nicht beeinflussen.
Genausowenig wie das rendering eines HTML-fähiger Browser am anderen
Ende der Leitung.

Verwende, wie schon vorgeschlagen, das IRC-Protokoll, denn dieses ist
für Chats ausgelegt, nicht HTTP (was ich jetzt mal glaskuglerisch
annehme).

Ich habe mittlerweile schon herausgefunden, dass man sich hierbei mit "flush()" Abhilfe schaffen kann. Das funktioniert bei mir aber leider auch nicht ohne weiteres. Ich bekomme zwar nun den Anfang des Chatouts mit Channelangabe und Anwesenden Usern, aber danach werden keine neuen Daten mehr angezeigt. Statt dessen wird beim Empfang weiterer Daten die Verbindung beendet.

Tja...

Es scheint, als würde der zweite "flush()" Befehl das ganze zum Kippen bringen. Wenn einer ne Idee hat, wäre ich sehr dankbar.

Nicht wirklich. Das ganze Konzept ist zum Kippen verdammt.

sub callback
{
 my($data, $response, $protocol) = @_;
 print $data;
 my $stdout = select(STDOUT);
 flush($stdout);
}

Warum in jedem Callback-Zykel die Standardausgabe selektieren und
flushen? - Verwende dies einmal ganz am Anfang und setze den
autoflush auf den Handle.

Viele Grüsse

Philipp