Wie Chat mit jQuery, PHP und MySQL zu implementieren?
Frage
Ich habe einen Chat-Skript mit PHP, MySQL und jQuery gemacht. Es verwendet json Daten von dem Server zu erhalten. Es macht feste Intervall Anfragen an den Server mit dem zuletzt abgerufenen Nachrichten-ID neuen Nachrichten vom Server zu erhalten. Aber wenn mehrere Benutzer Tausende und Abermillionen von Anfragen im Chat werden dann innerhalb einer Stunde auf den Server vorgenommen werden, und die Hosting-Leute werden es sicher blockieren.
Th gmail Chat-Buchse verwendet, denke ich. Weil es feste Intervall tut sendet keine Anforderungen sicher. Könnte einer von euch bitte geben Sie mir einige Beispiel-Code oder irgendeine Richtung um dieses Problem zu lösen.
Bitte ich brauche dringend Hilfe.
Vielen Dank im Voraus. Mein Respekt und Grüße für alle.
Lösung
Wenn der Host Sie verwenden würde „es sicher blockieren“, wenn es so viele Anfragen zu machen ist, dann möchten Sie vielleicht vor sich Gedanken über Ihren Code bekommen einen anderen Host oder ein Upgrade Ihr Hosting-Paket zu prüfen. Prüfen Sie, wie Facebook implementiert ihre Chat:
Die Methode, die wir gewählt haben zu bekommen Text aus einem Benutzer zum anderen beinhaltet Lade ein iframe auf jeder Facebook-Seite, und betreffenden iframe ist mit Javascript machen eine HTTP-GET-Anfrage über einen persistenten Verbindung, die bis nicht zurück die Server Daten für die Kunden. Die Anfrage wird wieder hergestellt, wenn es out unterbrochen oder Zeiten. Dies ist nicht durch jede eine neue Technik bedeutet: es ist ein Variation der Comet, insbesondere XHR Lang-Abfrage und / oder BOSH.
Andere Tipps
Sie finden es sinnvoll, ein Beispiel für ‚Kometen‘ Technologie in Aktion mit Prototyp des Kometen-Daemon und eine Anlegesteg Webserver . Der Beispielcode für innerhalb der Anlegestelle Download hat eine Beispielanwendung für Chat.
ich Anlegestelle mich vor kurzem installiert, so dass Sie ein Protokoll meiner Installation finden könnten Befehle nützlich:
Die ersten Schritte versucht, einen Kometen Dienst ausführen
Herunterladen Maven von http://maven.apache.org/
Installieren Maven http://maven.apache.org/download.html#Installation Ich habe die folgenden Befehle Heraus zu /home/sdwyer/apache-maven-2.0.9
> sdwyer@pluto:~/apache-maven-2.0.9$ export M2_HOME=/home/sdwyer/apache-maven-2.0.9
> sdwyer@pluto:~/apache-maven-2.0.9$ export M2=$M2_HOME/bin
> sdwyer@pluto:~/apache-maven-2.0.9$ export PATH=$M2:$PATH.
> sdwyer@pluto:~/apache-maven-2.0.9$ mvn --version
-bash: /home/sdwyer/apache-maven-2.0.9/bin/mvn: Permission denied
> sdwyer@pluto:~/apache-maven-2.0.9$ cd bin
> sdwyer@pluto:~/apache-maven-2.0.9/bin$ ls
m2 m2.bat m2.conf mvn mvn.bat mvnDebug mvnDebug.bat
> sdwyer@pluto:~/apache-maven-2.0.9/bin$ chmod +x mvn
> sdwyer@pluto:~/apache-maven-2.0.9/bin$ mvn –version
Maven version: 2.0.9
Java version: 1.5.0_08
OS name: “linux” version: “2.6.18-4-686″ arch: “i386″ Family: “unix”
sdwyer@pluto:~/apache-maven-2.0.9/bin$
Laden Sie die Anlegestelle Server von http://www.mortbay.org/jetty/ Auszug /home/sdwyer/jetty-6.1.3
> sdwyer@pluto:~$ cd jetty-6.1.3//examples/cometd-demo
> mvn jetty:run
Ein ganzer Stapel von Downloads laufen
Sobald es ist vollendet einen Browser öffnen und zeigen Sie es auf:
http://localhost:8080
und testen Sie die Demos.
Der Code für das Beispiel Demos finden Sie im Verzeichnis gefunden werden:
jetty-6.1.3/examples/cometd-demo/src/main/webapp/examples
Richtig oder falsch, ein Hosting-Unternehmen könnte für ein paar Gründe verschroben bekommen:
1) Quoten sind gut, sie Apache prefork verwenden. Jede Chat-Anfrage ist gonna wahrscheinlich eine neue Verbindung und damit einen einzigen Apache-Prozesses Schwein auf. Jeder Apache Prozess isst überall von 1 MB Speicher 100 MB Speicher.
2) Wenn sie den Datenbankserver und Sie, den Client, saugen an Datenbank-Programmierung pflegen, können Sie ihre Datenbank hämmern. „Suck“ bedeutet, etwas von „keine Indexierung“ auf „macht eine Unmenge von kleinen Anfragen statt schön fetten“.
Wie oben vorgeschlagen wurde, stellen Sie sicher, dass Ihr Code verwendet persistente Verbindungen. Auch:
Implementieren Sie1) einen Back-off-Algorithmus auf dem Client. Poll den Server einmal pro Sekunde während der Aktivität, dann ziehen sie sich zurück bis fünf Sekunden, dann zehn, zwanzig, etc ... Auf diese Weise können Sie den Server nicht hämmern, wenn es keine Aktivität ist.
2) Mehrere Registerkarten werden dich töten. Der Benutzer öffnet 10 Tabs und sie haben alle Ihre Chat-Widget Abfrage der Server einmal pro Sekunde? Schlechte Nachrichten. Selbst wenn Ihr Rechner ist nicht sauer bekommt, wird Ihre Leistung beeinträchtigen.
Wenn dieses Ding riesig wird, entwerfen Sie Ihr System in einer Weise, dass Sie die Chat-Server Bits unabhängig vom Rest Ihrer Web-Anwendung ausgeführt werden kann. In anderen Worten, würden die Kunden machen eine Anforderung an „chat.yourwebapp.com“, der wiederum auf so etwas wie lighttpd ausgeführt wird.
try Buchse in Javascript
Warum sollte der Host-Block das? Sie eine Standard-HTTP-Anforderung für eine Seite zu machen, wenn Ihr Host erlaubt es nicht, dass dann ist es Zeit zu wechseln.
Wie für Sockets verwenden, gibt es keine native Fähigkeit, an eine Steckdose über Javascript zu verbinden, obwohl ich glaube, JSocket ein lib ist, dass Sie eine Steckdose durch einen integrierten Blitz zu überbrücken können, die tatsächlich auf dem Server verbunden ist. Haben Sie nicht für ein jQuery-Plugin sah, dass dies der Fall ist, könnte man sein.
Ihr Server-Seite Code würde auch drastisch (persistent vs Polling sehr unterschiedlich ist) ändern, so müßten Sie Ihre Arbeit für Sie ausgeschnitten.
Ich empfehle nur das tun, was Sie tun, und Ihr Host aktualisieren, wenn sie es nicht verarbeiten kann. Es sei denn, Sie gehen, eine große Anzahl von Benutzern zu einer Zeit auf haben? Ein Caching-System, so dass Ihre nicht die db auf jeder einzelnen Anfrage schlagen kann wahrscheinlich die Dinge beschleunigen, wenn es so viel los ist.
Sie denken über einen kleinen Flash-Film auf der Seite einbetten und dann Sockets verwenden, um die Kommunikation mit dem Server zu handhaben. Dies wird eine Menge der Last vom Server nehmen und wäre viel einfacher zu halten alles synchron machen. Die Benutzeroberfläche könnte noch mit JavaScript machen.
Es Sie mit Ihrem JavaScript-Lösung bleiben dann meine Antwort still ignorieren: -)