Chatprogramm (ähnlich IRC)
-
Hallo
Kann mir jemand hier kurz erläutern, wie ein Chatprogramm ähnlich IRC funktioniert. Möchte nämlich in kleinem Rahmen auf sowas machen und weiss nicht wie bzw. wo anfangen.
Grüsse,
Trunxx
-
naja, am besten liest du dir mal die RFCs zum Thema IRC durch, selbst wenn du diese nur zum Teil verstehst, erhälst du so sicher einen Ansatz, wie dein Chatsystem funktionieren kann.
Schau dir mal die RFCs 2810 bis 2813 an
-
Wow... ist eigentlich genau das was ich gesucht habe
thx.
-
Könnte es so funktionieren:
Ich habe ein Programm (mit C# programmiert) welches jede Sekunde eine Anfrage zum Server sendet ob neue Eingaben vorhanden sind, wenn ja diese im Chatfenster ausgibt, und wenn der Benutzer etwas eingibt, dies zum Server in die Datei hochlädt.Würde es von der Geschwindigkeit her gehen, wenn ich mir free webspace irgendwo zulege und das als Speicherort für den Text und die Benutzernamen & dazugehörigen Passwörter nutze?
-
Trunxx schrieb:
Könnte es so funktionieren:
Ich habe ein Programm (mit C# programmiert) welches jede Sekunde eine Anfrage zum Server sendet ob neue Eingaben vorhanden sind, wenn ja diese im Chatfenster ausgibt, und wenn der Benutzer etwas eingibt, dies zum Server in die Datei hochlädt.fuer wieviele user?
bei jeder sekunde 1 anfrage geht der server doch viel zu schnell in die knie.ne, du musst es andersrum machen.
der client meldet sich beim server an, und wenn es eine neue nachricht gibt, meldet sich der server beim client.
natuerlich muessen die beiden einander "pingen" zB alle 5 minuten ein ping um sicherzustellen dass die andere seite noch da ist.dein ansatz geht nicht gut - weil du den server in die knie zwingst. das ist auch das problem der ganzen webchats. da wuerde ich lieber streaming HTML nehmen. aber das wird bei free webspace anbietern auch nicht gehen, da deine scripte dann ne maximale laufzeit haben.
etwas besser als deiner waere dieser ansatz:
der server verwaltet nur IP adressen.
der client meldet sich an und sagt: "hallo"
er erhaelt daraufhin vom server eine liste aller angemeldeten clients (also die ip adressen).
daraufhin connected er sich zu denen. wenn eine IP adresse nicht erreichbar ist, meldet er das dem server. diese streicht die ip adresse dann aus seiner liste.
und die clients unterhalten sich dann direkt miteinander. sprich jeder client schickt seine nachricht an alle anderen.das funktioniert aber nur bei wenigen chattern - dennoch denke ich, dass dieser ansatz besser ist als deiner.
man koennte da naemlich noch einen schritt weiter gehen und ein Kazaa aehnliches netz aufbauen. der server vergibt "supernodes", welche dann etwa wie der server funktionieren. dh, nicht alle clients kennen einander, sondern jeder client kennt nur seinen "supernode" und die supernodes kommunizieren dann miteinander. client schickt ne message - supernode schickt sie an alle anderen supernodes - und so bekommen die clients dann die message.
was besseres faellt mir nicht ein.
-
Für 2-20 User.
Einen scriptbasierenden Chat möchte ich nicht.Deine Idee ist natürlich besser - das mit der Serverüberlastung sehe ich ein.
Und die Zeichenketten würde ich dann direkt zu der IP Adresse aller Clienten über das TCP/IP Protokoll senden?
Was ist aber, wenn der Rechner hinter einem Router ist, und ich nur die IP des Routers habe? Oder läuft das ganz anderst?
-
Shade Of Mine schrieb:
ne, du musst es andersrum machen.
der client meldet sich beim server an, und wenn es eine neue nachricht gibt, meldet sich der server beim client.
natuerlich muessen die beiden einander "pingen" zB alle 5 minuten ein ping um sicherzustellen dass die andere seite noch da ist.Mh, also halten Server und Client keine durchgehende TCP Verbindung, und bei jeder neuen Zeile Text initiert der Server einen neuen TCP Handshake mit dem Client, nur um die Verbindung danach wieder zu trennen? Oder versteh ich dich jetzt falsch?
Shade Of Mine schrieb:
etwas besser als deiner waere dieser ansatz:
der server verwaltet nur IP adressen.
der client meldet sich an und sagt: "hallo"
er erhaelt daraufhin vom server eine liste aller angemeldeten clients (also die ip adressen). [...]Auch wenn du schon gesagt hast, dass das bei den allerwenigsten klappen wird, noch 2 Argumente dagegen:
-Lag
-Ca. 80% aller P2P User sind firewalled, das heißt incoming Connections sind nicht möglichShade Of Mine schrieb:
man koennte da naemlich noch einen schritt weiter gehen und ein Kazaa aehnliches netz aufbauen. [...]
Gibt es schon, allerdings nicht für Realtime. Es gibt wohl ein P2P System dieser art für Weblogs, also Tagebücher die jemand so schnell und anonym verbreitet.
Ich denke dass IRC im moment das Optimum darstellt was an Chatsystemen möglich ist, sowohl im Bezug auf Skalierbarkeit als auch auf Wirtschaftlichkeit
-
Trunxx schrieb:
[...]
Was ist aber, wenn der Rechner hinter einem Router ist, und ich nur die IP des Routers habe? Oder läuft das ganz anderst?
Leute hinter Routern (NAT) oder Firewalls können keine incoming Connections empfangen. Klingt was doof, heißt im Prinzip nur, dass es unmöglich ist per socket.connect () direkt zu denen ne Verbindung zu erstellen.
Das dürfte aber kein Problem sein bei persistenten TCP Verbindungen: Der firewalled Client initiert die Verbindung von sich aus, wenn diese Connection dann aufrechterhalten wird, ist es möglich beidseitig Daten auszutauschen.Von der IP des Routers oder der Firewall wirst du nix mitkriegen. Ich bin @home auch in einem LAN hinter nem NAT Router. Meine LANIP ist 192.168.69.88, die vom Router 192.168.69.254. Davon kriegt niemand was mit (sieht man alleine schon dadurch, dass 192.168.* ne IP Range ist, die es nicht im Internet gibt)