Ajax "Gibt es neue Inhalte? Wenn dies der Fall ist, aktualisieren Sie die Seite "- Wie geht das, ohne den Server zu beschädigen?

8

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 du das zu oft tust, oder mit zu vielen Kindern auf einmal, wird der Server unter Druck knicken.

Wie lösen Sie das Problem, dass eine Webseite in der Reihenfolge von 5 Sekunden nach neuem Inhalt sucht und eine größere Anzahl von Besuchern zulässt?

    
Alexander Morland 14.11.2008, 09:59
quelle

10 Antworten

4

stackoverflow macht es irgendwie, weiß aber nicht wie.

Der Standardweg wäre in der Tat das Javascript, das alle paar Sekunden nach neuem Inhalt sucht.

Ein fortgeschrittenerer Weg würde eine push-like -Technik verwenden, indem Comet Techniken (Long-Polling und so). Es gibt eine Menge interessanter Sachen 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 pushen?

    
Berzemus 14.11.2008, 10:12
quelle
2

In Java habe ich die Ajax-Bibliothek (DWR) mit der Comet-Technologie verwendet - ich denke, Sie sollten in PHP nach einer Bibliothek suchen. Die Idee ist, dass der Server eine sehr lange HTTP-Antwort sendet und wenn er etwas an den Client senden muss, beendet er ihn und sendet eine neue Antwort mit aktualisierten Daten. Mit diesem Client muss der Server nicht alle x Sekunden pingen, um neue Daten zu erhalten - ich denke, das könnte Ihnen helfen.

    
pbrodka 14.11.2008 10:27
quelle
2

Sie können die Pollzeit abhängig von der Anzahl der Clients variieren lassen. Mit Ihrer Metapher fragt das Kind "Sind wir schon da?" und der Fahrer antwortet "Nein, aber vielleicht in einer Stunde". Glücklicherweise ist Javascript kein störrisches Kind, also kannst du sicher sein, dass er dich bis dahin nicht ärgern wird.

    
monzee 14.11.2008 12:07
quelle
2

Sie könnten in Betracht ziehen, alle 5 Sekunden zu beginnen, aber nach einer Weile beginnen Sie, die Pollintervallzeit zu erhöhen - vielleicht bis zu einer gewissen Obergrenze (1 Minute, 5 Minuten - was auch immer für Ihre Verwendung optimal erscheint). Der Anstieg muss nicht linear sein.

Ein ausgefeilterer Spin (der den Vorschlag von monzee beinhalten könnte, je nach Anzahl der Clients zu variieren) würde es dem Server erlauben, das Intervall vor der nächsten Abfrage zu diktieren. Der Server könnte dann die Intervale im Laufe der Zeit erhöhen, und Sie können sogar den Algorithmus im laufenden Betrieb oder als Antwort auf Netzwerklast ändern.

    
philsquared 14.11.2008 12:13
quelle
1

Sie können sich das Twisted-Framework in Python ansehen. Es ist ein ereignisgesteuertes Netzwerkprogrammierungsframework, das Ihren Anforderungen entspricht. Es kann verwendet werden, um Nachrichten vom Server zu übertragen.

    
anand.trex 14.11.2008 10:17
quelle
1

Vielleicht können Sie eine Abfrage an ein echtes einfaches Skript senden, das keine echte db-Abfrage erstellen muss, sondern nur einen einfachen Zeitstempel verwendet, um zu erkennen, ob es etwas Neues gibt.

Und dann, wenn die Antwort wahr ist, können Sie eine echte Abfrage machen, wo der Server wirklich arbeiten muss! -)

    
roenving 14.11.2008 10:18
quelle
0

Sehen Sie sich diesen Link an, er erklärt die verschiedenen Web-Remoting-Techniken

    
Pablo Cabrera 14.11.2008 10:21
quelle
0

Ich hätte eine einzelne Instanz, die die DB aufruft, und wenn ein neuerer Zeitstempel existiert, lege diesen neuen Zeitstempel in eine Anwendungsvariable. Lassen Sie dann alle Sitzungen mit dieser Anwendungsvariablen vergleichen. Oder etwas ähnliches. Auf diese Weise ruft nur eine Instanz den sql-Server an und die Anzahl der Clients spielt keine Rolle.

Ich habe das nicht versucht und es ist nur die erste idéa auf dem Kopf, aber ich denke, dass der Zeitstempel cashe und lassen Sie die Kunden prüfen, die Cashe ist eine Möglichkeit, es zu tun, und wie das Cashe (SQL-Server -cashe, Anwendungsvariable und so weiter) Ich weiß nicht, was am besten ist.

    
Stefan 14.11.2008 12:29
quelle
0

Was SO betrifft, beachte, dass es nicht ständig nach neuen Antworten sucht, nur wenn du in das Feld "Deine Antwort" eingibst.

Der Schlüssel besteht dann darin, zunächst eine rechnerisch günstige Operation durchzuführen, um häufige "no update required" -Fälle (z. B. Eingabe einer neuen Antwort oder Überprüfung eines Zeitstempels) auszusondern, bevor ein teurer Prozess zum tatsächlichen Abrufen von Änderungen eingeleitet wird / p>

Alternativ dazu können Sie dies je nach Anwendung möglicherweise durch Optimierung des Change-Publishing-Mechanismus beheben. Zum Beispiel könnte es vielleicht machbar sein, dass Änderungen (oder Zusammenfassungen davon) in einen RSS-Feed eingefügt werden und die Kunden den Feed anstelle der realen Anwendung sehen. Wir können davon ausgehen, dass dies ziemlich effizient wäre, da es genau die Art von Dingen ist, für die RSS entwickelt und optimiert wurde. Außerdem hätte es den zusätzlichen Vorteil, dass Ihre Anwendung mit wenig oder gar keinen Kosten für den Rest der Welt interoperabler wird du.

    
Dave Sherohman 14.11.2008 18:45
quelle
0

Ich glaube, dass der Ansatz shd auf einer Kombination von serverseitigen Sockets und clientseitigen Ajax / Comet basiert. Wie:

Nehmen Sie eine Chat-Anwendung mit mehreren angemeldeten Benutzern an und dass jeder von ihnen über einen langsamen AJAX-Aufruf für das serverseitige Listener-Skript abhört.

Welcher Browser die gerade eingegebenen Daten abruft, sendet sie mit einem Ajax-Aufruf an ein Writer-Skript an den Server. Dieser Server aktualisiert die Datenbank (oder das Speichersystem) und sendet einen Socket-Write an ein notiertes Listenerscript. Letzterer erhält dann die neuen Daten und sendet sie zurück an den Client-Browser.

Nun habe ich das noch nicht geschrieben, und momentan weiß ich nicht, ob und wie das Browserlimit von zwei gleichzeitigen Verbindungen die obige Logik durcheinanderbringt.

Werde es schätzen, jemanden mit Gedanken hier zu hören.

AS

    
Arnold Shore 15.11.2008 17:45
quelle

Tags und Links