02.03.2011, 09:48
Seiten: 1 2
02.03.2011, 11:16
Man kann mit Apache / PHP / MySQL keinen effizienten Chat realisieren. Jede Shoutbox die so ausgelegt ist wird dir Probleme bereiten. Diese Shoutboxen müssen in sehr kurzen Intervallen (1 Sekunde) einen Request an den Server schicken um herauszufinden ob es eine neue Meldung gibt, bei 10 Usern bedeutet das dann durchgängig 10 Requests pro Sekunde (wenn die User mehrere Tabs offen haben auch entsprechend mehr). Wenn das dann über PHP und noch schlimmer, über MyBB läuft, hast du für jeden Request auch noch zig Queries anhängig (Session, usw. und letztendlich wohl auch die Shoutbox-Abfrage wenn die Shoutbox die Meldungen in der DB speichert). Das bricht dann alles sehr schnell zusammen... selbst auf einem Dedi kommst du da mit dreistelligen Userzahlen nicht mehr klar.
Chats an sich sind trivial, gibts ja schon seit über 20 Jahren (IRC) auf deutlich schwächerer Hardware mit deutlich höheren Userzahlen. Das Problem ist daß Browser und Webserver darauf einfach überhaupt nicht ausgelegt sind, so ist es z.B. immer noch nicht möglich einfach eine feste Verbindung aufzubauen und diese zur bidirektionalen Kommunikation mit dem Client dauerhaft offen zu lassen.
Diese Möglichkeit soll in naher Zukunft kommen (WebSocket), aber das ist noch unausgereift und wird von nur wenigen Browsern unterstützt.
Die effizienteste Möglichkeit für einen Chat ist derzeit, den Browser einen Request schicken zu lassen, und den Webserver mit der Antwort so lange warten zu lassen, bis tatsächlich eine neue Meldung reinkommt. Aber da macht Apache / PHP nicht mit, da brauchst du einen Webserver der Requests vollständig asynchron behandeln kann. nginx kann das z.B. http://pushmodule.slact.net/
Ich bastle derzeit ein Chat-Plugin das mit nginx/Python als externen Chatserver redet, leider gibts da einige Hürden zu überwinden (aus Sicherheitsgründen darf man z.B. nicht einfach so einen AJAX-Request an einen fremden Server schicken), und JavaScript ist leider mit eine der frustrierendsten Programmiersprachen überhaupt, da es sich in jedem Browser anders verhält. Aber selbst wenn ich damit fertig werde ist das immer noch kein effizienter Chat sondern etwas das dann halt mit ein paar weniger Requests (und ohne Datenbank) auskommt...
Chats an sich sind trivial, gibts ja schon seit über 20 Jahren (IRC) auf deutlich schwächerer Hardware mit deutlich höheren Userzahlen. Das Problem ist daß Browser und Webserver darauf einfach überhaupt nicht ausgelegt sind, so ist es z.B. immer noch nicht möglich einfach eine feste Verbindung aufzubauen und diese zur bidirektionalen Kommunikation mit dem Client dauerhaft offen zu lassen.
Diese Möglichkeit soll in naher Zukunft kommen (WebSocket), aber das ist noch unausgereift und wird von nur wenigen Browsern unterstützt.
Die effizienteste Möglichkeit für einen Chat ist derzeit, den Browser einen Request schicken zu lassen, und den Webserver mit der Antwort so lange warten zu lassen, bis tatsächlich eine neue Meldung reinkommt. Aber da macht Apache / PHP nicht mit, da brauchst du einen Webserver der Requests vollständig asynchron behandeln kann. nginx kann das z.B. http://pushmodule.slact.net/
Ich bastle derzeit ein Chat-Plugin das mit nginx/Python als externen Chatserver redet, leider gibts da einige Hürden zu überwinden (aus Sicherheitsgründen darf man z.B. nicht einfach so einen AJAX-Request an einen fremden Server schicken), und JavaScript ist leider mit eine der frustrierendsten Programmiersprachen überhaupt, da es sich in jedem Browser anders verhält. Aber selbst wenn ich damit fertig werde ist das immer noch kein effizienter Chat sondern etwas das dann halt mit ein paar weniger Requests (und ohne Datenbank) auskommt...
03.03.2011, 20:46
Also gibt es keine andere Möglichkeit als die Shoutbox abzuschalten oder tatsächlich auf dieses phpbb oder wie das heißt zu wechseln wo die shout schon integriert ist ?
03.03.2011, 21:07
Du wirst mit jeder Shoutbox die gleichen Probleme haben...
03.03.2011, 23:32
Die andere Möglichkeit ist, das Ding eben nicht über Apache/PHP/SQL laufen zu lassen, sondern separat, mit einer Lösung die serverseitig keine (nennenswerte) Last mehr verursacht.
Das setzt aber voraus, einerseits einen eigenen Server, und andererseits daß es da eine fertige Softwarelösung gibt und du auch in der Lage bist diese auf deinem Server aufzusetzen.
Zumindest mit MyBB Integration gibt es da noch keine fertigen Lösungen.
Das setzt aber voraus, einerseits einen eigenen Server, und andererseits daß es da eine fertige Softwarelösung gibt und du auch in der Lage bist diese auf deinem Server aufzusetzen.
Zumindest mit MyBB Integration gibt es da noch keine fertigen Lösungen.
Seiten: 1 2