Chat - wie funktioniert das eigentlich?
trunx
- sonstiges
0 Tom0 Matze0 Deus Figendi
Hallo Forum,
wie funktioniert eigentlich chat-Software über einen Browser wie Firefox? Ich hab mir gedacht, die einfachste Form wäre ein Affenformular, dass sich alle paar Sekunden selbst erneuert (mit einem refresh-meta-tag). Aber dies ruckelt und wenn ich so chats sehe, dann ruckeln die nicht. Vermutlich wird nicht mal refresh genutzt, oder?
Also es wäre schön, wenn jemand eine deutschsprachige Seite kennt, wo man mal dazu was nachlesen könnte.
vielen Dank
trunx
Hello,
wie funktioniert eigentlich chat-Software über einen Browser wie Firefox? Ich hab mir gedacht, die einfachste Form wäre ein Affenformular, dass sich alle paar Sekunden selbst erneuert (mit einem refresh-meta-tag). Aber dies ruckelt und wenn ich so chats sehe, dann ruckeln die nicht. Vermutlich wird nicht mal refresh genutzt, oder?
Oft handelt es sich dabei um Java-Applets, also nicht JavaScript.
Allerdings gibt es inzwischen auch Lösungen mit AJAX, die nicht schlecht sind und auch nicht den Server mit zuviel Requests zumüllen.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hallo trunx,
Also es wäre schön, wenn jemand eine deutschsprachige Seite kennt, wo man mal dazu was nachlesen könnte.
ich habe noch keinen Chat gesehen der mit Meta-Refresh arbeitet.
Das dürfte auch viele Probleme mit anderen Elementen, die von POST- oder GET-Variablen abhängig sind, mit sich bringen.
Meine Vorschläge wären AJAX oder Flash.
Gute Anlaufstellen könnten hier oder hier sein.
Grüße, Matze
Chats werden normalerweise nicht in Browsern abgehandelt und auch nicht über HTTP. Natürlich geht das, aber es ist nicht dafür gedacht.
Die meisten Chats (vermute ich mal) sind einfach IRC und dann irgendein auf den Browser aufgesetzter IRC-Client (als PlugIn oder Applet oder... ich hab auch mal 'nen HTTP-Port gesehen).
Alternativ - weil moderner - geht natürlich auch XMPP.
Hallo,
vielen Dank für eure Antworten :-) was ich nicht verstehe ist folgendes: bei http ist es grob gesagt ja so, dass der Client eine Anfrage an den Server schickt und dieser dann dem Client antwortet. Beim Chat muss das aber anders laufen, der Server schickt dann nicht nur an den anfragenden Client die Antwort, sondern auch an alle anderen (eingeloggten) Clients. Bedeutet das nun, dass das irc-Protokoll Serveraktionen erlaubt und alle beteiligten clients quasi immer einen download erwarten?
viele Grüße
trunx
Chats werden normalerweise nicht in Browsern abgehandelt und auch nicht über HTTP. Natürlich geht das, aber es ist nicht dafür gedacht.
Die meisten Chats (vermute ich mal) sind einfach IRC und dann irgendein auf den Browser aufgesetzter IRC-Client (als PlugIn oder Applet oder... ich hab auch mal 'nen HTTP-Port gesehen).
Alternativ - weil moderner - geht natürlich auch XMPP.
Hi,
bei http ist es grob gesagt ja so, dass der Client eine Anfrage an den Server schickt und dieser dann dem Client antwortet.
richtig.
Beim Chat muss das aber anders laufen, der Server schickt dann nicht nur an den anfragenden Client die Antwort, sondern auch an alle anderen (eingeloggten) Clients. Bedeutet das nun, dass das irc-Protokoll Serveraktionen erlaubt und alle beteiligten clients quasi immer einen download erwarten?
Gewissermaßen, ja. Ein IRC-Client baut eine permanente Verbindung zum Server auf und horcht auch ständig, ob der Server was zu sagen hat - im Gegensatz zu HTTP, wo auf eine Anfrage exakt eine Antwort folgt, und dann die Verbindung wieder getrennt wird. HTTP/1.1 erlaubt zwar, die Verbindung bestehen zu lassen, um so mehrere Request/Response-Zyklen zu fahren, ohne jedesmal den ganzen TCP/IP-Verbindungsaufbau neu auszuhandeln. Aber es bleibt trotzdem beim Grundprinzip: Der Server antwortet nur, wenn er vom Client angefragt wird.
Ciao,
Martin
Hallo Martin,
Aber es bleibt trotzdem beim Grundprinzip: Der Server antwortet nur, wenn er vom Client angefragt wird.
okay, danke. D.h. wenn man mit ajax einen Chat bauen würde, dann würde man wahlweise über XMLHttpRequest() oder ActiveXObject(...) alle paar Sekunden nachfragen, ob sich auf dem Server was geändert hat (also jemand was geschrieben hat) und dann entsprechend die Seite ändern... hmm, ist das so richtig? Das würde ja eine ziemliche Serverbelastung bedeuten, oder?
ciao trunx
Hi!
D.h. wenn man mit ajax einen Chat bauen würde, dann würde man wahlweise über XMLHttpRequest() oder ActiveXObject(...) alle paar Sekunden nachfragen, ob sich auf dem Server was geändert hat (also jemand was geschrieben hat) und dann entsprechend die Seite ändern... hmm, ist das so richtig? Das würde ja eine ziemliche Serverbelastung bedeuten, oder?
Eine andere Möglichkeit wäre, dass der Client anfragt, aber der Server zwar die Verbindung offenhält, jedoch erst antwortet, wenn Daten vorhanden sind. Wenn es ein Timeout gibt, baut der Client mit einem erneuten Request gleich wieder die Verbindung auf und das Gewarte geht weiter. Das geht natürlich nur in begrenztem Maße, denn offene Verbindungen belegen auch Ressourcen. Für eine überschaubare Anzahl an Clients ist das aber kein Problem.
Lo!
Hallo,
ok, ich glaub, jetzt hab ich es verstanden, danke an alle :-)
Eine andere Möglichkeit wäre, dass der Client anfragt, aber der Server zwar die Verbindung offenhält, jedoch erst antwortet, wenn Daten vorhanden sind. Wenn es ein Timeout gibt, baut der Client mit einem erneuten Request gleich wieder die Verbindung auf und das Gewarte geht weiter. Das geht natürlich nur in begrenztem Maße, denn offene Verbindungen belegen auch Ressourcen. Für eine überschaubare Anzahl an Clients ist das aber kein Problem.
oder auch beides kombinieren, aber gut, das sind dann die Details in der Ausführung, mir ging es hier erstmal ums prinzipielle Verständnis...
ciao trunx
hi,
Aber es bleibt trotzdem beim Grundprinzip: Der Server antwortet nur, wenn er vom Client angefragt wird.
okay, danke. D.h. wenn man mit ajax einen Chat bauen würde, dann würde man wahlweise über XMLHttpRequest() oder ActiveXObject(...) alle paar Sekunden nachfragen, ob sich auf dem Server was geändert hat (also jemand was geschrieben hat) und dann entsprechend die Seite ändern... hmm, ist das so richtig? Das würde ja eine ziemliche Serverbelastung bedeuten, oder?
Beim NDR gabs mal einen Chat, der war als reines CGI geschrieben. Jeder "Refresh" von jedem Teilnehmer bedeutet einen Request an den Server, bei einem pure CGI wird in der Response jedesmal eine komplette HTML-Seite geschickt. Dieser Chat ist dann auch regelmäßig zusammengebrochen ;-)
Mit Ajax gibt es genauso diese Requests, nur die Responsen sind ein bischen kleiner. Für kleine Telnehmerkreise, sagen wir mal 2..3 ist das ok, da spielt wohl jeder Server noch mit, wenn pro Chatter alle 10 s mal nachgefragt wird. Hier könntest Du noch mit Entities oder Last-Modified die Responsen nochn stückchen kleiner machen, aber die Grenzen gibts schon und die sind eng.
Hotti