Zeitsynchronisierung mit hoher Latenz

9

Ich mache ein Auktions-Skript und die Synchronisierung der Zeit zwischen Besuchern und dem Server ist notwendig (wann endet die Auktion). Jedes Mal, wenn ein Nutzer ein Gebot abgibt, wird die Auktionsendzeit um einige Sekunden verlängert. Mein Problem ist, dass sich mehrere Benutzer darüber beschweren, dass ihre Timer überspringen (einige Sekunden) und herausgefunden haben, dass dies auf eine Verbindung mit hoher Latenz zurückzuführen ist.

Mein aktueller Algorithmus hat eine JavaScript-Funktion, die jede Sekunde ausgeführt wird und durch Ajax-Anfragen Zeit für die Auktion übrig lässt. Gibt es einen besseren Weg, dies zu erreichen, vor allem für Benutzer mit hoher Latenzzeit, um das Problem des Zeitüberspringens zu vermeiden?

    
yowmamasita 09.10.2012, 18:16
quelle

3 Antworten

2

Adaptive Intervalle

Zunächst würde ich vorschlagen, dass Sie die Anzahl der Abfragen verringern. Ich weiß nichts über Ihre Serverimplementierung, aber das aktuelle Setup wird eine Menge von Anfragen erstellen, sobald Sie ein paar Benutzer haben.

Ich würde vorschlagen, dass Sie das Abfrageintervall abhängig von der verbleibenden Zeit anpassen. Wenn noch zwei Stunden bis zum Ende einer Auktion übrig bleiben, ist es uns vielleicht egal, ob die zusätzlichen Sekunden nur jede Minute vom Server abgeholt werden, oder? Du könntest es so machen

%Vor%

Das Intervall ist kürzer und das Ergebnis ist gegen Ende der Auktion genauer.

Server gesendete Ereignisse

Für die letzte Minute oder so, wenn Sie eine hohe Genauigkeit wünschen, ist regelmäßige Polling in kurzen Intervallen nicht die beste Lösung, wie in den Kommentaren diskutiert. Langes Polling ist eine Option, aber Sie sollten auch in HTML5 Server Gesendete Ereignisse schauen, die wie eine native Browser-Implementierung aussieht von langer Wahl. Es gibt eine gute Einführung und einen Vergleich mit Websockets . Die Browser-Unterstützung ist bereits ziemlich gut, es gibt einen Polyfill für nicht unterstützte Browser, der auf ... Umfrage.

    
pixelistik 10.10.2012, 09:10
quelle
2

Haben Sie lange Umfragen gemacht? Verwenden Sie können eine jquery / javascript Countdown-Uhr verwenden und dann nur die Countdown-Zeit ändern, wenn ein neues Gebot abgegeben wird. Sollte deine Ajax Anrufe drastisch reduzieren.

    
Pitchinnate 09.10.2012 19:02
quelle
1
  

JavaScript-Funktion, die jede Sekunde ausgeführt wird

Dies ist die alte Art zu tun, was Sie wollen.

Ich denke, Sie müssen Web-Sockets verwenden, um die Lieferung in Echtzeit für alle Benutzer sicherzustellen. Wenn Sie Zeit sparen möchten, können Sie alle verfügbaren Web-Socket-Server verwenden, anstatt sie selbst zu erstellen.

Ich bevorzuge Real-Time Pusher Es ist einfach und Sie können es kostenlos verwenden, aber mit einer begrenzten Anzahl von Benutzern. Sie können auch für mehr Benutzer aufrüsten. www.pusher.com

Außerdem haben Sie eine gute API-Dokumentation, die Ihnen hilft, das, was Sie wollen, schnell und einfach zu implementieren.

Für jede Hilfe mit Pusher-oder-Websockets können Sie gerne fragen.

    
quelle

Tags und Links