Frage von FloPinguin, 83

Website Chat Umsetzung?

Hallo,

Wenn ich auf einer Website einen Chat anbiete, müsste ich ja per AJAX alle paar Sekunden einen Request an die Datenbank schicken, ob denn jemand anderes etwas geschrieben hat.

Das könnte bei vielen Websiteusern ordentlich Traffic erzeugen ... Gibt es eine elegantere Lösung?

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von reponere, 52

Wie schon gesagt wurde gibt es die Möglichkeit Websockets dafür zu benutzen.

Eine andere Möglichkeit ist long-polling. Das heißt dass der ajax request vom Server zB 60 Sekunden lang aufrechterhalten wird und der server erst antwortet sowie eine neue Nachricht da ist.

Vorteil zu alle paar Sekunden ajax-Requests senden:
Weniger Traffic.

Nachteil:
Ein Server kann nur eine begrenzte Anzahl Verbindungen gleichzeitig aufrechterhalten, wenn du also viele Benutzer hast wird dein Server damit überlastet. Bei wenigen Benutzern kann das durchaus gut funktionieren.

Ich würde aber Websockets im Vergleich zu dieser Methode vorziehen, ich habe diese Möglichkeit nur ergänzt weil Websockets nicht mit jeder Server-Konfiguration so ohne weiteres funktionieren. (Vor allem wenn man, wie ich, bei einem Hosting Service ist wo PHP ohne "--enable-sockets" konfiguriert ist)

Kommentar von FloPinguin ,

Hab mir das mit Websockets gerade mal durchgelesen, das wäre in meinem Fall keine so optimale Lösung.

Die Methode mit Ajax-Requests könnte man ja stark optimieren:

- Chat ist Verborgen, erst beim klick darauf werden Nachrichten geladen (Chat ist immer in den rechten Ecke des Bildschirms)
- Automatische Schließung des Chats wenn der Nutzer Maus und Tastatur nicht nutzt oder sich nicht mit dem Chat beschäftigt
- Reload-Timer auf höhere Sekunden Intervalle setzen
- Nur eine Nachricht pro x Sekunden senden dürfen
- Geschickte Abfragen (nicht jedes mal alles abfragen, sondern nur fragen ob etwas neues da ist)

Kommentar von reponere ,

Hört sich recht gut an, nur das "Nur eine Nachricht pro x Sekunden senden dürfen" würde ich weglassen. Das verärgert Benutzer eher. Aber ansonsten ist das denke ich ein guter Ansatz.

Kommentar von FloPinguin ,

Naja ist aber notwendig, sonst könnte man einfach Spammen.

Kommentar von reponere ,

Anderer Ansatz:

Man kann jederzeit Nachrichten senden. Aber die werden gesammelt und nur alle x Sekunden an den Server gesendet. Der Benutzer kann also permanent schreiben aber es entsteht nicht so viel Traffic. Die Anzeige dass die Nachricht gesendet wurde ist dann halt erst nach x Sekunden da.

Gegen Spam solltest du (denke ich) so wie so effektivere Methoden einsetzen, denn theoretisch kann man auch mit mehreren Tabs/Fenstern gleichzeitig schreiben und auf diese Weise spammen

Antwort
von heilwigkenner, 18

Verwende Websockets.

Ich würde dir raten, mit Node.js und passenden Erweiterungen zu arbeiten.

https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API

Antwort
von fluffiknuffi, 15

Node.js + Websockets. Ist im Prinzip nicht schwer - wenn man JS kann, das Hosting des Node.js-Server funktioniert und falls nötig die Kommunikation zwischen PHP-Webapp und Node.js-Server (User authentifizieren...) hergestellt wurde.

Wäre halt super performant. Ob du diese Performance benötigst, das ist die große Frage. Für ein dutzend Chatteilnehmer auf keinen Fall. Da reicht dein AJAX-Ansatz.

Long-polling ist von der Idee & Umsetzung her super einfach. Hier wird behauptet, mit einem NGINX-Server seien auch 10000 gleichzeitige Verbindungen möglich: http://www.accso.de/wp/2013/11/skalierbares-http-long-polling/

Antwort
von yerooke, 42

Ja gibt es - Websocket benutzen.

Keine passende Antwort gefunden?

Fragen Sie die Community