phpbar.de logo

Mailinglisten-Archive

[php] Performanter php Chat

[php] Performanter php Chat

Andreas Müller php at universalware.de
Die Nov 4 10:23:57 CET 2003


Hallo Harald,
mal sehen welche Fragen ich beantworten kann:

> -) kann man das wo testen?
Leider nein da es in einer geschlossenen Community läuft. Aber für weitere
Ideen etc. kannst du dir mal phpMyChat ansehen.

> -) Ist ein Lesethread ein Frame der alle x Secunden refresht?
> -) was genau ist HTML Streaming ?
Nein das ist ein PHP Script das in einem Frame vom Browser geöffnet wird und
quasi in einer Endlosschleife läuft aber natürlich mit sleep oder usleep. In
der Schleife wird bei jedem Durchlauf die neuen an den Browser zu
schickenden Daten ermittelt und diese ausgegeben und der ausgabepuffer
geleert. Um die Verbindung aufrecht zu erhalten sollte man alle x Sekunden
(z.B 120) inaktivität (=keine Ausgabe) eine "leere" Ausgabe (z.B. HTML
Kommentar) zum Browser schicken.
Alternativ kann man mit einen Hidden Frame arbeiten, dort auch Streamen aber
die Scriptlaufzeit begrenzen und dann automatisch per JavaScript reloaden.
Die Ausgaben werden dann duch JavaScript Anweisungen im Hidden Frame in den
Ausgabeframe geschrieben.
Die Techniken kann man sich in phpMyChat bzw. auch in www.chatcity.de o.ä.
ansehen.

> -) Wie merk ich mir die Position in der Datei? Schreibst du das
> in die Datei selber?

Das ganze ist bei mir noch etwas komplexer als ich es beschrieben hae weil
noch viel mehr geht. Aber kurz: In der Endlosschleife musst du dir nur den
Filepointer merken. so z.B.

  $path="pfad zur datei";
  $fp=filesize($path);
  while(!connection_aborted()) {
    $f=fopen($path,'r');
    fseek($f,$fp);
    while (!feof($f)) {
      $s=fgets($f,4096);
      if ($s) {
        $s=nl2br($s);
        echo "$s\n";
        flush();
      }
    }
    $fp=ftell($f);
    fclose($f);
    usleep(200);
  }

> -) Und wenn es mehrere Räume gibt, dann gibt es pro Benutzer
> mehrere TXT-Dateien oder??

Prinzipiell gilt bei der Technik: pro Chatfenster pro User eine Datei. Also
wenn er immer nur in einem Raum sein kann hat jeder User immer nur eine
Datei gleichzeitig. Wobei sich die Datei beim Raumwechsel bei mir z.B.
ändert, d.h. alte Datei wird gelöscht neue Datei wird erzeugt.

Gruß,
Andreas



php::bar PHP Wiki   -   Listenarchive