Habe einen äußerst simplen Chat in PHP geschrieben, der eine Textdatei ausliest, und neue Einträge unten einfügt. Im Browser lädt sich die Seite alle paar Sekunden neu.
Das nervt natürlich. Gibt es eine Möglichkeit, mit PHP oder Perl oder wenns nicht zu schwer zu blicken ist, auch mit Java einen ähnlich simplen Chat zu bauen, der ohne ständiges Neuladen funktioniert?
HTTP ist für dauerhafte Verbindungen die denkbar ungünstigste Wahl, weil es per Definition ein verbindungsloses Protokoll ist, d.h. für jede Übertragung wird eine neue Verbindung aufgebaut. Dementsprechend befriedigend ist dann ja auch Dein PHP-Ergebnis ausgefallen.
Dementsprechend befriedigend ist dann ja auch Dein PHP-Ergebnis ausgefallen, da neue Daten vom Server nicht sofort (über die bestehende Verbindung) übertragen werden können, sondern der Client zwangsläufig auf Verdacht hin alle Nase lang beim Server anfragen muß.
Möchtest Du es besser machen, brauchst Du eine Möglichkeit, direkt vom Server aus bei Bedarf Daten an den Client zu senden. Du brauchst also am sinnvollsten a) einen Server, der _nicht_ auf dem verbindungslosen HTTP basiert, und b) am anderen Ende natürlich auch einen Client, der Dein gewähltes Protokoll unterstützt.
Auf Serverseite bist Du mit PHP in dieser Hinsicht ziemlich aufgeschmissen, weil in der Regel die Laufzeit der Skripte auf wenige Minuten beschränkt ist - an einen ständig laufenden Server bzw. offen gehaltene Verbindungen ist da nicht zu denken.
Mit Perl wird das schon eher was, weil Perl-Skripte als eigenständige Programme laufen; ich könnte mir allerdings vorstellen, daß Dein Hoster etwas dagegen hat, wenn Du eigenmächtigerweise stundenlange Verbindungen offen hälst.
Auf Clientseite könnte sich tatsächlich etwas mit Javascript über HTTP machen lassen. Der Browser bekäme quasi eine endlose Seite übertragen; die neuen Nachrichten werden am "Ende" dieser Seite als Javascript-Befehle gesendet, die die Daten in ein Textfeld o.ä. eintragen. Ob das funktioniert, weiß ich nicht.
Mit Java könnte man einen Client programmieren, der beim Aufruf lediglich die Adressen der derzeit beteiligten Rechner bekommt und dann von sich aus Verbindungen mit diesen Rechnern herstellt. Der Server dient in dem Sinne nur noch als Buchhaltung über angemeldete Rechner. Diese Lösung hat allerdings große Stolpersteine, Probleme bei der Abmeldung vom Server und Firewalls auf den Anwenderrechnern fallen mir da ein.
Und somit kommen wir zur berühmten Frage: Warum das Rad neu erfinden? Es gibt seit bald 14 Jahren ein Chatprotokoll, das mit hunderten von ständig erreichbaren Servern weltweit in einem Dutzend Netze von tausenden gleichzeitig genutzt wird: IRC (http://irchelp.org/). Clients gibt es dafür zuhauf, eigenständige wie mIRC oder xircon und auch systemunabhängige Java-Applets für Webbrowser.
Der SelfChat funktioniert auch damit, schau mal rein: http://aktuell.de.selfhtml.org/live/chat.htm.
Gruß,
soenk.e