PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ich möchte einen Perl-basierenden Chat schreiben.



Rebell
05-02-2004, 18:28
Hallo.

ICh habe vor einiger Zeit mit einem Tutorial ein Chat geschrieben der auf der Kommandozeile funktioniert. Bisher läuft alles, also man kann sich anmelden und draufloschatten. Nun möchte ich aber einen Webclient schreiben und weiß nicht so recht wie ich das anfangen soll. Dazu habe ich mehrere Fragen:

Mein Kommandozeilen Client schreibt und empfängt über ein Socket. Aber wie mach ich das bei einem Webclient?
Öffne ich dem Webclient einen Socket zum Lesen des Chatstreams? Und ein zusätzliches Socket zum SChreiben? D.h. 2 Verbindungen pro Client. Oder kann ich das irgendwie kombinieren?

Als nächstes interessiert mich, wie ich den Chatstream lese. Ich habe mir dazu einfach einen Client geschrieben der ständig (mit while) am Socket horcht. Aber dann habe ich das Phänomen, dass die aufgeforderte Seite nie aufhört zu laden. Außerdem zeigt sie nichts an. Wie realisiere ich das?

Ich hoffe es findet sich jemand, der bereits Erfahrungen damit hat.

Grüße,
Mike

foobarflu
06-02-2004, 09:06
> Mein Kommandozeilen Client schreibt und empfängt über ein Socket.
> Aber wie mach ich das bei einem Webclient?
Auch über ein Socket, allerdings wird nen Webbrowser üblicherweise HTTP-Requests senden.

> Aber dann habe ich das Phänomen, dass die aufgeforderte Seite nie
> aufhört zu laden.
japp, das soll ja auch so sein, die ekligen Refresh-basierten Dinger sollten seit dem Stern-Webchat '97 der Vergangenheit angehören.

Technische Hintergründe zum Prinzip: http://wp.netscape.com/assist/net_sites/pushpull.html

> Öffne ich dem Webclient einen Socket zum Lesen des Chatstreams?
> Und ein zusätzliches Socket zum SChreiben? D.h. 2 Verbindungen
> pro Client. Oder kann ich das irgendwie kombinieren?
Üblicherweise ja. Man kann zwar auch mit HTTP/1.1 rumspielen, aber das macht üblicherweise mehr Zicken.
Realisierung sieht oft so aus, dass Du zwei Frames hast, im einen kommt der Stream vom Server an und wird angezeigt, im zweiten ist das Eingabefeld für den Text.
Problematisch wird an der Sache primär die Zuordnung der Kommandos zur Verbindung.

> Außerdem zeigt sie nichts an. Wie realisiere ich das?
Dummerweise sind die meisten Browser da im Verhalten unterschiedlich.


<font>die Nachricht hier</font><br />

sollte die meisten eigentlich dazu bringen, das schon erhaltene zu rendern. Opera ist in der Hinsicht allerdings ein wenig zickig.
Ein einfaches <br /> reicht unter Umständen auch schon.

Alle Klarheiten beseitigt?

Rebell
06-02-2004, 17:16
Naja, nicht ganz. Ich frage mich noch wie ich das Eingabesocket realisiere.
Den Lese-Stream wird wohl ziemlich einfach über Push/Pull zu machen sein.
Aber da ja der Eingabeframe wiederrum über HTTP-Request von statten geht.

Angenommen ich sende meine Daten an eine client.pl, woher weiß die dann welches Socket es benutzen soll.

Mir ist gerade durch den Kopf gegangen dass man es so anstellen könnte:

Webclient meldet sich mit Name/PW an login.pl an und bekommt Rückmeldung über Erfolg mit einer "ErkennungsID". Webclient wird mit dieser ErkennungsID an den Stream client-get.pl weitergeleitet der eine Socket-Verbindung mit server.pl öffnet und die Chat-Nachrichten empfängt sowie die ErkennungsID dem Server mittelt. Das Eingabeframe des Webclients erhält auch die ErkennungsID. Bei jedem Abschicken eines Textes, öffnet client-put.pl ein neues Socket mit dem server.pl und sendet seine ErkennungsID sowie seinen Text mit.

Das würde ich sogar hinbekommen. Ich habe nur noch ein paar Probleme mit dem Datenaustausch zwischen Objekten und der main-Funktion in Perl. Ich habe ein Objekt "Chatter" welches sich beim Konstruktor in einer Funktion außerhalbs des Objektes registrieren soll (damit der Server immer weiß wieviele Verbindungen er offen hat) leider bekomme ich die nötigen Variablen des Objektes nicht dorthin, auch nicht wenn ich es als Referenz übergebe.

systemdefender
28-02-2004, 19:44
weisst du wieviele leute schon einen chat geschrieben haben?

in etwa genauso viel wie
echo "hallo welt" geschrieben haben.

an deiner stelle würde ich mir doch lieber einen runter holen (http://www.google.de/linux?num=50&hl=de&ie=ISO-8859-1&newwindow=1&safe=off&q=chat+script+%22php+OR+perl%22&btnG=Google+Suche&meta=lr%3Dlang_de). aus dem internet meine ich natürlich :D

cu

EliNathan
11-06-2005, 21:17
seid ihr inzw. weitergekommen?

Rebell
11-06-2005, 23:38
Ja, mein Chatserver läuft, aber mittlerweile das Interesse verloren.