• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Chat - AJAX vs. Java-Applet

Hoeth

New member
Hallo mal wieder!

Da ich mit der Suche leider nichts gefunden habe, muß ich die Frage nun stellen. :D

Ich Programmiere grad zusammen mit jemandem an einer Webseite, die auch einen Chat enthalten soll. Nun habe ich mich mal schlau gemacht, welche Möglichkeiten zur Verwirklichung eines Chats denn so da sind. Dabei sind folgende in die engere Auswahl gekommen:

- Java-Applet
- AJAX basierend

Das Applet hat den Vorteil, daß es nur den Server belastet, wenn wirklich was gepostet wird. Nachteil ist, daß der User Java aktiviert haben muß und ein Verteilerprogramm auf dem Server laufen muß (bietet mein aktueller Hoster nicht an).

Deshalb und der Einfachheit wegen tendiere ich eher zu der Ajax-Variante, allerdings stellt sich für mich die Frage, wieviel Serverlast diese erzeugt.

Die Funktionsweise, die ich mir angeschaut habe läuft so:
Alle 1-2 Sekunden schickt der Browser via Ajax einen Request an eine PHP-Datei auf dem Server. Diese schaut dann in einer MySQL Datenbank nach, ob neue Daten existieren. Wenn ja, werden diese als Response zurück geschickt, wenn nicht passiert gar nichts.
Wenn man selbst was schreibt, wird ebenfalls ein Request erzeugt, der dann in die Datenbank schreibt, aber die dadurch entstehende Last für den Server ist ja eher gering.

- Jetzt möchte ich gerne wissen, ab wieviel Usern (grob geschätzt) diese Variante anfängt den Server in die Knie zu zwingen. Sicherlich braucht es um ein vielfaches mehr, als eine Variante ohne Ajax mit kompletten Seitenrefresh, aber ich kann das leider nicht einschätzen?


- Gibt es noch eine bessere Variante mit Ajax, bzw. Finetuning um die Routine zu verbessern und den Server zu entlasten?

- Würdet ihr mir eher zu nem Java-Applet raten, auch wenn dieses in der Programmierung und Einbindung eher etwas komplizierter ist?

Mfg Hoeth
 
Apache kann per Default 256 ("MaxClients") Verbindungen aufnehmen. Und bei MySQL sind es um die 100.

Ich denke, wenn man den Ajax-Chat etwas ausbalanciert, dann sollten schon 150 Leute in den Raum passen. :icon7:
 
Schon mal an einen Flash-Chat gedacht?
flash chat - Google-Suche

Kommt für mich nicht in Frage, da Flash Geld kostet.


Apache kann per Default 256 ("MaxClients") Verbindungen aufnehmen. Und bei MySQL sind es um die 100.

Ich denke, wenn man den Ajax-Chat etwas ausbalanciert, dann sollten schon 150 Leute in den Raum passen. :icon7:

Naja, die Apache Verbindungen sind ja relativ egal, da ich ja keinen Privatserver laufen lasse sondern nen Hoster verwende. Keine Ahnung wieviel der da mitmacht :)

Naja, bei MySQL muß ich halt die Verbindung jedes Mal kappen, wenn die Anfrage fertig ist.^^

Die Frage ist halt nur, wieviele Anfragen können gleichzeitig eintrudeln, bis sich der Server verabschiedet, weil er mit dem abarbeiten nicht mehr hinterher kommt bzw bis die Leitung zu eng wird.
 
Naja, es kommt halt darauf an, ob Du dies selbst schreiben, oder aber auf etwas Fertiges zurückgreifen willst.
Wenn es etwas Fertiges sein kann, dann sind hinter meinem Link einige kostenlose Angebote dabei.

Will eher was selber schreiben. Wenn ich mit etwas arbeite, will ich es auch zu 100% verstehen und da ist es am Besten wenn man was selber codet. Außerdem will ich dabei auch was lernen.

Naja, wie gesagt, wüßte gern welche Lösung ihr für besser haltet, vorallem mit Augenmerk auf die Userzahl. Und die soll schon nach oben hin recht weit offen sein. Hat Ajax eine große Toleranz oder wird es bei 100 Usern gleichzeitig schon eng?

Mfg Hoeth
 
Hat Ajax eine große Toleranz oder wird es bei 100 Usern gleichzeitig schon eng?
Das kann man so pauschal kaum beantworten, das hängt auch davon ab, wievielmal Du pollen möchtest, (Jede Sekunde? Alle 15 Sekunden? Jede Minute? - oder je nach Intensität mal schneller oder langsamer) und wie geschickt Du dich anstellst um die Einträge upzudaten (mit Vorteil nur die letzten geänderten Einträge mitschicken, anstatt jedesmal alles etc.) Grundsätzlich dürfte der Traffic bei 100 Personen eher hoch sein (zumindest der Header wird ja immer mitgesendet, egal ob neue Daten anfallen oder nicht).
Dann gäbe es da noch ein neues lustiges Schlagwort: COMET, welches darauf beruht, die Verbindung zum Server offenzuhalten. M.E. eine nicht besonders gute Variante (ich kenne mich allerdings auf der Serverseite nicht besonders gut aus; und habe keine Ahnung, inwieweit das den Server in der Performance beeinträchtigt. Ich vermute mal, bei 100 Personen heftig).

Ein Applet zu schreiben, lohnt sich m.E. kaum, es sei denn, Du hast einen serverseitigen Servlet-Container zur Verfügung. Dann kannst Du die neuen Nachrichten pushen, sofern Du Dir noch einen Chatserver schreibst. Das ist sicherlich die beste Variante, sie erfordert allerdings ein wenig Verständnis für Java (insbes. Netzwerkprogrammierung und Threads). Das spart dann ebenfalls Traffic, da ja nur die eingehenden Nachrichten weitergeleitet werden; ebenfalls ist dann eine serverseitige Speicherung (im Gegensatz zu einer Lösung mit php als Chatserver) nicht mehr erforderlich.

Falls Du keinen Servlet-Container zur Verfügung hast, lohnt sich der Aufwand, ein Applet zu produzieren kaum: Du müsstest ebenfalls den Server pollen, nicht alle Personen haben Java installiert, und AJAX dürfte erheblich schneller sein.
 
Das kann man so pauschal kaum beantworten, das hängt auch davon ab, wievielmal Du pollen möchtest, (Jede Sekunde? Alle 15 Sekunden? Jede Minute? - oder je nach Intensität mal schneller oder langsamer) und wie geschickt Du dich anstellst um die Einträge upzudaten (mit Vorteil nur die letzten geänderten Einträge mitschicken, anstatt jedesmal alles etc.) Grundsätzlich dürfte der Traffic bei 100 Personen eher hoch sein (zumindest der Header wird ja immer mitgesendet, egal ob neue Daten anfallen oder nicht).
Dann gäbe es da noch ein neues lustiges Schlagwort: COMET, welches darauf beruht, die Verbindung zum Server offenzuhalten. M.E. eine nicht besonders gute Variante (ich kenne mich allerdings auf der Serverseite nicht besonders gut aus; und habe keine Ahnung, inwieweit das den Server in der Performance beeinträchtigt. Ich vermute mal, bei 100 Personen heftig).

Ein Applet zu schreiben, lohnt sich m.E. kaum, es sei denn, Du hast einen serverseitigen Servlet-Container zur Verfügung. Dann kannst Du die neuen Nachrichten pushen, sofern Du Dir noch einen Chatserver schreibst. Das ist sicherlich die beste Variante, sie erfordert allerdings ein wenig Verständnis für Java (insbes. Netzwerkprogrammierung und Threads). Das spart dann ebenfalls Traffic, da ja nur die eingehenden Nachrichten weitergeleitet werden; ebenfalls ist dann eine serverseitige Speicherung (im Gegensatz zu einer Lösung mit php als Chatserver) nicht mehr erforderlich.

Falls Du keinen Servlet-Container zur Verfügung hast, lohnt sich der Aufwand, ein Applet zu produzieren kaum: Du müsstest ebenfalls den Server pollen, nicht alle Personen haben Java installiert, und AJAX dürfte erheblich schneller sein.


Mh... Danke für deine ausfürliche Antwort. Damit kann ich was anfangen. Ich denke ich werde erstmal die Ajax-Variante ausprobieren. Wenn sich die Userzahl so weit erhöht hat, daß der Server anfängt nicht mehr hinterher zu kommen, kann ich immernoch eine bessere Variante einfügen, da der Chat größtenteils unabhängig vom Rest der Webseite ist. Nur der jeweilige ChatRaum hängt davon ab, was der User auf der Seite so treibt. Meine Idee wäre noch, eine "Aufrufe-pro-Sekunde-Pauschale" festzulegen und dann die Refresh immer nach Userzahl anzupassen. Z.B. Setze ich diese auf 25 Aufrufe pro Sekunde. Bei 25 Usern würde der Chat jede Sekunde refreshen. Bei 50 nur noch alle 2s usw.

Mal schaun was draus wird. :) Danke jedenfalls.

Mfg Hoeth
 
ich würde diesen Wert nach der aktivität einstellen, wenn niemand was schreibt brauchst du auch nicht jede Sekunde eine abfrage schicken. D.h. einfach den interval erhöhen wenn keine Änderungen stattfinden bis zu einem Grenzwert. du kannst auch noch testen wie lange die Abfrage braucht und wenn du feststellt sie dauert länger, dann ebenfalls den interval erhöhen.
 
ich würde diesen Wert nach der aktivität einstellen, wenn niemand was schreibt brauchst du auch nicht jede Sekunde eine abfrage schicken. D.h. einfach den interval erhöhen wenn keine Änderungen stattfinden bis zu einem Grenzwert. du kannst auch noch testen wie lange die Abfrage braucht und wenn du feststellt sie dauert länger, dann ebenfalls den interval erhöhen.

So, ich habe nun die Rohform eines AjaxChats in meine Seite implementiert und es läuft bis auf nen paar kleine Probleme mit Umlauten recht gut.

Was die Serverlast angeht:

Ich werd demnächst mal nen kleinen Test mit mehreren Usern fahren, aber vorher hab ich mir schonmal die Zeit ausgeben lassen, die der Server zum abarbeiten einer Anfrage braucht.
Es kamen dabei ca 2 Milisekunden bei raus (Abarbeitung des Php-teils).
Also dürfte er bei 100 Usern die sekündlich zugreifen ungefähr 2 zehntelsekunden brauchen um dies abzuarbeiten. Mir ist klar, daß dieser Wert optimiert ist und man so auf keinen Fall genau rechnen kann, aber als grober Anhaltspunkt ist das denke ich mal okay.

Mfg Hoeth
 
Dass das schonmal 20% der verfügbaren Rechenkapazität ausmacht ist dir schon klar oder? Zu dem muss jede Nachricht auch noch gesendet werden (weitere CPU Zeit) und über deine Verbindung muss dass auch noch gehen.
 
Dass das schonmal 20% der verfügbaren Rechenkapazität ausmacht ist dir schon klar oder? Zu dem muss jede Nachricht auch noch gesendet werden (weitere CPU Zeit) und über deine Verbindung muss dass auch noch gehen.

Ja, das ist mir schon klar, aber es dient ja auch erstmal als grober Anhaltspunkt bei welcher Rate wieviel Last erzeugt wird.
 
Zurück
Oben