Ajax „Gibt es neue Inhalte? Wenn ja, update -Seite ” - Wie kann ich das tun, ohne den Server zu brechen?

StackOverflow https://stackoverflow.com/questions/289667

  •  08-07-2019
  •  | 
  •  

Frage

Es ist ein einfacher Fall eines JavaScript, das ständig fragt: "Gibt es schon?" Wie ein Vierjähriger auf einer Autofahrt. Aber ähnlich wie Eltern, wenn Sie dies zu oft tun, oder, mit zu vielen Kindern gleichzeitig, wird der Server unter Druck schnallen.

Wie lösen Sie das Problem einer Webseite, die in der Reihenfolge von 5 Sekunden nach neuen Inhalten sucht und eine größere Anzahl von Besuchern ermöglicht?

War es hilfreich?

Lösung

Stackoverflow macht es irgendwie, weiß nicht wie.

Der Standardweg wäre in der Tat das JavaScript, das alle paar Sekunden nach neuen Inhalten sucht.

Ein fortgeschrittenerer Weg würde a verwenden push-artig Technik durch Verwendung Komet Techniken (Langstreicher und so). Es gibt viele interessante Dinge unter diesem Link.

Ich warte immer noch auf eine gute Gelegenheit, es selbst zu benutzen ...

Oh, und hier ist ein Link von Stackoverflow darüber:
Gibt es eine Möglichkeit, Daten vom Webserver zum Browser zu überschreiten?

Andere Tipps

In Java habe ich die AJAX -Bibliothek (DWR) mit Comet -Technologie verwendet - ich denke, Sie sollten in PHP nach der Bibliothek suchen. Die Idee ist, dass der Server eine sehr lange HTTP -Antwort sendet und wenn er etwas an den Client senden kann, beendet er es und sendet neue Antwort mit aktualisierten Daten. Die Verwendung von IT -Client muss nicht alle x Sekunden Ping -Server Ping -Server benötigen, um neue Daten zu erhalten - ich denke, es könnte Ihnen helfen.

Sie können die Wahlzeit variablen, abhängig von der Anzahl der Kunden. Mit Ihrer Metapher fragt das Kind: "Sind wir schon da?" Und der Fahrer antwortet "Nein, aber vielleicht in einer Stunde". Zum Glück ist JavaScript kein hartnäckiges Kind, also können Sie sicher sein, dass er Sie bis dahin nicht nervt.

Sie konnten zunächst alle 5 Sekunden Zeit in Betracht ziehen, aber nach einer Weile, die Umfrageintervallzeit - möglicherweise bis zu einer Obergrenze (1 Minute, 5 Minute - - was auch immer für Ihre Verwendung optimal erscheint) zu erhöhen. Der Anstieg muss nicht linear sein.

Ein ausgefeilterer Spin (der den Vorschlag von Monzee nach der Anzahl der Clients beinhalten könnte) wäre, dem Server das Intervall vor der nächsten Umfrage zu bestimmen. Der Server könnte dann das Intervale im Laufe der Zeit erhöhen, und Sie können sogar den Algorithmus im laufenden oder als Antwort auf die Netzwerkbelastung ändern.

Sie könnten sich das ansehen 'Verdrehte' Rahmen in Python. Es ist ein ereignisorientiertes Netzwerkprogrammierungframework, das möglicherweise das erfüllt, wonach Sie suchen. Es kann verwendet werden, um Nachrichten vom Server zu pushen.

Vielleicht können Sie eine Abfrage an ein echtes einfaches Skript senden, das nicht ein echtes DB-Query erstellen muss, sondern nur einen einfachen Zeitstempel, um festzustellen, ob es etwas Neues gibt.

Und wenn die Antwort wahr ist, können Sie eine echte Abfrage durchführen, bei der der Server echte Arbeit leisten muss!-).

Schau dir das an Verknüpfung, Es erklärt die verschiedenen Web -Remoting -Techniken

Ich würde eine einzelne Instanz haben, die den DB aufruft, und wenn ein neuer Zeitstempel existiert, geben Sie diesen neuen Zeitstempel in eine Anwendungsvariable. Lassen Sie dann alle Sitzungen gegen diese Anwendungsvariable überprüfen. Oder sowas ähnliches. Auf diese Weise nennt nur ein Innstance den SQL-Server und die Anzahl der Kunden ist keine Rolle.

Ich habe dies nicht versucht und es ist nur die erste Idéa auf der Spitze des Kopfes, aber ich denke, dass der Zeitstempel ein CaShe-Timestamp und die Kunden überprüfen lassen, dass die Kasse eine Möglichkeit ist, dies zu tun, und wie man die Kasse implementiert (SQL-Server-Cashe, Anwendungsvariable und so weiter) Ich weiß nicht, was am besten ist.

Beachten Sie, dass es nicht kontinuierlich auf neue Antworten prüft, nur wenn Sie in das Feld "Ihre Antwort" eingeben.

Der Schlüssel besteht dann darin, zuerst einen rechnerisch -billigen Betrieb durchzuführen, um gemeinsame Fälle von "No Update benötigte" (z. B. eine neue Antwort oder Überprüfung eines Zeitstempels), bevor ein teureres Prozess initiiert wird, um tatsächlich Änderungen abzurufen.

Abhängig von Ihrer Anwendung können Sie dies möglicherweise auflösen, indem Sie Ihren Mechanismus zur Veröffentlichung optimieren. Zum Beispiel kann es möglicherweise möglich sein, Änderungen (oder Zusammenfassungen von ihnen) auf einen RSS -Feed zu setzen und Clients den Feed anstelle der realen Anwendung zu beobachten. Wir können davon ausgehen, dass dies ziemlich effizient wäre, da genau das ist, wofür RSS entworfen und optimiert ist. Sie.

Ich glaube, der Ansatz basiert auf einer Kombination aus serverseitigen Sockets und clientseitigem Ajax/Comet. Wie:

Nehmen Sie eine Chat-Anwendung mit mehreren angemeldeten Benutzern an, und jedes davon hört sie über einen langsamen Ajax-Aufruf an das serverseitige Listener-Skript zu.

Was auch immer Browser erhält, den gerecht eingereichten Daten unterbreitet sie dem Server mit einem Ajax-Anruf bei einem Schriftstellungsskript. Dieser Server aktualisiert die Datenbank (oder das Speichersystem) und veröffentlicht eine Sockets, die an das notierte Listener -Skript schreibt. Letzteres erhält dann die frischen Daten und veröffentlicht sie wieder an den Client -Browser.

Jetzt habe ich das noch nicht geschrieben, und im Moment weiß ich nicht, ob/wie die Browsergrenze von zwei gleichzeitigen Verbindungen die obige Logik vermasselt.

Ich werde es schätzen, FM hier zu hören.

WIE

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