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.

War es hilfreich?

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 Sie

1) 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

http://code.google.com/p/jsocket/

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: -)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top