Frank: CGI-Chat: Wie merk ich, daß jemand nicht mehr dabei ist?

Hallo Freunde der CGI-Programmierung,

ich hab jetzt mit Perl einen kleinen CGI-Chat gebastelt.
Alle User müssen sich einloggen und ein Nickname aussuchen, wodurch eine Datei mit dem Nickname in einem Verzeichnis entsteht.
Die Eingaben der User, also das "Gechattet", werden in eine Text-Datei gespeichert. Die Ausgabe der chat folgt in einem Frame-Fenster, die sich alle 5 Sekunden "refrecht".
Durch das Einloggen der User kann ich wissen, wie viele sich eingeloggt haben.

Mein Problem nun: Wie erfahre ich, daß jemand nicht mehr im chat-raum ist, also er sich aus dem chat weggeklickt hat, oder anderen URL im Browser aufgerufen hat, oder sonst was macht außer chatten natürlich ...
Ich hab mir überlegt einen Button zum ausloggen einzurichten,
aber der User könnte doch statt dessen einfach sein Browser schliessen, oder anderen URL angeben. Und dann würde das ausloggen gar nix bringen, denn er wäre als eingeloggt registriert!

Habt ihr ne Idee wie man das lösen könnte?
Für Anregungen bin ich euch sehr dankbar!

Herzlichen Grüße
Frank

  1. Hallo Frank,
    um zu wissen, wer gerade auf Deiner Chat-Page ist, musst Du eine ständige Verbindung zum Client haben.
    Sowas realisiert man in Perl über Sockets (siehe z.B. http://www.perl.com/pub/doc/manual/html/pod/perlipc.html#Sockets_Client_Server_Communica), ist allerdings bei vielen Usern sehr (Arbeits-)Speicherhungrig....

    Beste Gruesse,

    Jan

  2. Hallo Frank,

    Eigentlich hast du alles was du brauchst:

    Die Ausgabe der chat folgt in einem Frame-Fenster,
    die sich alle 5 Sekunden "refrecht".  [...]

    Mein Problem nun: Wie erfahre ich, daß jemand nicht mehr im chat-raum ist ...

    Wer (z.b. 30 sec) nicht mehr refresht ist draussen.

    Gruss,
    Carsten

  3. Hallo Frank,

    eine hundertpro-Lösung gibt es leider nicht (dachten wir auch zuerst). Daher mach ein Logout-Button mit dem Hinweis, dass man sich gefälligst auszuloggen hat, wenn man geht. (Ein bisschen Höflichkeit sollte schon sein)

    Alternativ kann der Chat sich nach 2 bis 5 Minuten komplett neu aufbauen und dadurch alle User, die nicht mehr da sind (kleines txt-file reicht zur IP-Speicherung) rausschmeisst.

    Wenn Du das aber mit den herkömmlichen Perl-Scripten realisiert hast, mache Dich mal auf gehörigen traffic gefasst, weil da ständig ein komplettes Fenster neu übertragen wird. Auch der Server-Push verhält sich da nicht viel anders. Wir haben es mal offline versucht. Einfach gigantisch. Ausserdem sehr Speicherintensiv für den Server. Mit so etwas haben wir apache gekillt :-)

    Hunold