Einfacher AJAX-Chat mit Prototype

01. März 2007 § 25 Kommentare

Heute programmiert: Ein einfacher Chat in einer einzigen PHP-Datei. Ohne Benutzerverwaltung, mit nur einem Passwort und mit einfachen Textdateien zur Benutzer- und Nachrichtenspeicherung.

Alles was benötigt wird ist ein Webserver der PHP unterstützt und die Prototype-Javascript-Bibliothek. Diese wird von der PHP-Datei eingebunden und für den Chat benutzt. Die Datei muss “prototype.js” heißen und im gleichen Verzeichnis wie die PHP-Datei liegen. Prototype kann hier herunter geladen werden und ist in dem ZIP-Paket nicht enthalten.

Da die AJAX-Calls alle zwei Sekunden laufen wenn der Chat aktiv ist, kann es bei vielen gleichzeitigen Benutzern zu einer ziemlichen Serverlast kommen. Also bitte mit Bedacht einsetzen oder die Werte entsprechend hochschrauben im Code.

Natürlich ist das Programm unter der GPL-Lizenz und xHTML 1.0 Strict valide ;-)

Viel Spaß beim Antesten: Download Exanto Webchat

Screenshot:

Exanto Webchat

Getaggt mit , , , , ,

§ 25 Kommentare zu Einfacher AJAX-Chat mit Prototype"

  1. PCMasters sagt:

    Servus. Du könntest hier ja auch mal solch einen Chat reinstellen. Auch wenn es nur als Demo ist, wo man sich treffen könnte.

  2. ajax sagt:

    Wie kann ich denn die Message loschicken, wenn ich ENTER drücke?

  3. IT sagt:

    Hallo,

    ja, es geht einfach über “Enter”. Bei mir hat das immer geklappt. Der Austausch der Nachrichten findet über eine Datei auf dem Server statt, und neue Nachrichten werden über einen Timestamp-Vergleich ermittelt.

    Grüße, Ingo

  4. Hy,

    saubere Arbeit, gefällt mir gut. Ich habe mal eine andere Frage:

    Ich versuche nun, prototy einzusetzen. Wie funzt das mit Klassen und requests?

  5. IT sagt:

    Hi Christian, die Frage ist etwas zu allgemein um sie mal eben zu beantworten ;) Vielleicht willst du erstmal pauschal etwas über OOP lernen? Dazu kann ich dir das Openbook Praxisbuch Objektorientierung von Galileo Press empfehlen. Es ist kostenlos und sehr gut zum “Einstieg”.

    Grüße, Ingo

  6. julio sagt:

    Bei mir geht bei IE aber bei Firefox 2.0.0.4 tut nichts. Ich bekomme kein fehler meldung auch keine Javascript feher nur “Server nicht gefunden”

  7. IT sagt:

    Hm, ich habe das Teil unter Firefox 2.0 entwickelt, und tippe daher auf einen Fehler beim Server-Setup.

  8. alex sagt:

    hi. coole sache. nur bei mir ist das script absolut nicht usable. als test habe ich mal “hallo” eingegeben. jetzt kommt alle 2 sekunden die erneute ausgabe von “hallo” in der box. für mein verständnis sollte das nur 1x kommen, oder? alex

  9. Tester sagt:

    Müssen dabei irgendwelche chmod-Rechte gesetzt werden (Verzeichnis, Datei)?

  10. IT sagt:

    Jep, der Webserver muss Schreibrechte auf das Verzeichnis des Chats haben, da er dort Dateien anlegt in denen die Nachrichten zwischengespeichert werden.

  11. daniz sagt:

    Leider funktioniert der chat nicht mit der aktuellen Prototype Version 1.6

    Die Texte werden mehrfach angezeigt :-(

  12. screenz sagt:

    Dasselbe Problem habe ich auch. Wo liegt der Fehler? Es ist so, dass die User erst auf einmal aus der Liste verschwinden und dann der text immer wieder ausgelesen und doppelt angezeigt wird, scheint aber am Ajax/Javascript Teil zu liegen. Könnte mir da jemand weiterhelfen?

    Danke!

  13. IT sagt:

    Hi,

    ich habe momentan leider keine Zeit das Skript zu debuggen… es war auch eher ein Proof-of-Concept ursprünglich.

  14. terrorbit sagt:

    Hallo!

    der Fehler liegt in der Prototyp.JS nehmt einfach die 1.50 vom 8.Januar 07 die funktioniert, bei den andern habe ich auch den selben Fehler gehabt!

  15. marco sagt:

    frage wenn ich mich in den chat einloggen will muss mann sich anmelden und passwort eingeben ja aber vorher muss mann sich ja regestrieren ja aber nur wo und dann steht darunter unter anmelden “fehler bei der anmeldung” kann mir da jemand hefen

  16. IT sagt:

    Hallo marco,

    das Passwort ist immer gleich, das ändert man einfach in der Quelldatei des Chats. Es gibt keine Benutzerregistrierung bei dem Chat, ist eben nur ein einfaches Programm.

  17. bix sagt:

    macht einfach insertion: Insertion.top, statt bottom in der Ajax.PeriodicalUpdater func. Dann klappts auch mit dem Nachbarn ;)

  18. bärtle sagt:

    Naja hab irgendwie das selbe problem.. wie soll man bei der Anmeldung erstmals in den chat kommen? Laut php code

    ist das Passwort : PASSWORD ?

    Und der username!?

  19. bärtle sagt:

    Ups soory das ich Spame seh eben das ist ne Konstante also das passwort lautet Webchat nicht PASSWORD.. und der Username ist egal

  20. Lukas sagt:

    Bei mir ist es so, dass wenn ich den chat aktualisiere, dass die nachrichte dann gelöscht werden Was soll ich machen ???

  21. moe sagt:

    nicht aktualisieren ;)

  22. Öhhh sagt:

    Ich wollte diesen Chat mal auf XAMPP testen. Allerdings kann ich mich nicht einloggen. In der Quelldatei finde ich nur einen Verweise auf eine user.txt welche nicht existiert. Wie ist diese aufgebaut? Danke!

    • IT sagt:

      Siehe zwei Kommentare weiter oben ;-) Das Ding ist wie gesagt nur Proof-of-Concept gewesen damals und hat keine Nutzerverwaltung.

  23. Anonymous sagt:

    Diese Funktion muß ersetzt werden. Das behebt den Fehler, daß die Nachricht alle 2 Sekunden auftaucht – außerdem solltet ihr die Wiedholfrequenz in dem Ajax Code auf 6 Sekunden setzen – Viel Spaß

      function get_messages($timestamp) {
        if (!file_exists(CHAT_FILE)) { die; }
        $data = file(CHAT_FILE);
        foreach ($data as $line) {
          $chunks = explode("\t", $line);
          $get = explode(".", $chunks["0"]);
          if ($get["0"] < time() - 6) {
          } else {
          //only fetch messages that were written after last user action
          if ($chunks[0] > $timestamp) { $new_msgs[] = $chunks[1]; }
          }
        }
        if (!is_array($new_msgs)) { $new_msgs = array(); }
        //update last_action of user
        update_last_action(microtime_float(), $_SESSION['username']);
        //return nicely formatted html
        $html = false;
        foreach ($new_msgs as $msg) {
          $html .= '<p>'.$msg.'</p>';
        }
        return $html;
      }
    

    Wiederhol Frequen auf 6 Sekunden :s

  24. None sagt:

    Hi, ich danke dir für dieses Skript. Habe etwas einfaches gesucht und dein Skript trifft genau das. Danke vielmals dafür! None

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht.

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">