2012-07-03 20 views
7

Ich habe eine App, wo Benutzer einen Toggle-Wert zwischen true und false mit einem kleinen Wechselschalter/Schaltfläche ändern können und die Änderung automatisch an den Server gesendet wird, ohne dass der Benutzer explizit etwas wie "Speichern" drücken muss.Werden nachfolgende AJAX-Anfragen garantiert in der richtigen Reihenfolge empfangen?

Wenn nun der Benutzer den Kippschalter zweimal hintereinander drückt, ist es möglich, dass der Server die Pakete außer Betrieb empfängt und dadurch den falschen Wert speichert? Und mit Server meine ich die App-Logik, die auf dem Server läuft, nicht den Betriebssystem-Netzwerk-Stack.

Ich weiß, TCP-Pakete sind nummeriert, so dass das empfangende Betriebssystem sie vor der Übergabe an die Anwendung sortiert, und HTTP läuft auf TCP. Der Teil, der mich interessiert, ist jedoch, unter welchen Umständen HTTP eine neue TCP-Verbindung erstellt/nicht erstellt.

N.B. Ich benutze jQuery, um die AJAX-Anfragen zu senden, und ich gehe davon aus, dass sie garantiert in der gleichen Reihenfolge wie die Aufrufe der jQuery-Bibliothek gesendet werden. Ist diese Annahme gültig?

Antwort

5

Eine solche Garantie gibt es im HTTP-Protokoll nicht. Selbst wenn einige Implementierungen dies tatsächlich garantieren, sollten Sie sich nicht darauf verlassen.

Sie könnten dies tun: Halten Sie einen Klick Count (oder rufen Sie die Versionsnummer, wenn Sie bevorzugen), und senden Sie es an den Server. Speichern Sie auf dem Server die letzte Versionsnummer, wenn Sie den Status ändern, und überprüfen Sie mit dieser Nummer, dass Sie nie einen jüngeren Wert überschreiben.

+0

+1; Die einfachste Logik für eine solche Versionierung könnte '(neues Datum) sein .getTime()' –

+3

+1 JavaScript ist single-threaded, daher sendet jQuery die Anfragen der Reihe nach, aber es gibt keine solche Garantie, wenn die Anfragen beim Server ankommen. In der Praxis werden sie fast immer, aber schreiben keine Logik, um davon abhängig zu sein. –

+0

@DavidHedlund Watchout: Dies kann fehlschlagen, wenn sich die Zeit ändert (explizite Zeitänderung des Benutzers, Zeitserver-Synchronisierung). –

Verwandte Themen