2012-07-03 12 views
7

Mam aplikację, w której użytkownicy mogą zmieniać wartość przełączania między true a false za pomocą małego przełącznika/przycisku, a zmiana jest automatycznie wysyłana na serwer bez konieczności wyraźnego naciskania przez użytkownika na coś takiego jak "zapisz".Czy kolejne żądania AJAX są gwarantowane, aby otrzymać je w kolejności?

Teraz, jeśli użytkownik naciśnie przełącznik dwa razy w krótkich odstępach czasu, czy jest możliwe, że serwer odbierze pakiety w nieprawidłowej kolejności, a tym samym zapisze błędną wartość? A przez serwer rozumiem logikę aplikacji działającą na serwerze, a nie stos sieciowy OS.

Wiem, że pakiety TCP są ponumerowane, więc odbierający je OS sortuje je przed przekazaniem ich do aplikacji, a protokół HTTP uruchamia się nad TCP. Jednak część, która mnie interesuje, to, w jakich okolicznościach HTTP tworzy/nie tworzy nowego połączenia TCP.

N.B. Używam jQuery do wysyłania żądań AJAX i zakładam, że są one gwarantowane, że zostaną wysłane w tej samej kolejności co wywołania biblioteki jQuery. Czy to założenie jest ważne?

Odpowiedz

5

Nie ma takiej gwarancji w protokole http. Nawet jeśli niektóre implementacje mogą faktycznie to zagwarantować, nie powinieneś polegać na nim.

Możesz to zrobić: utrzymaj liczbę kliknięć (lub wywołaj numer wersji, jeśli wolisz) i wyślij ją na serwer. Na serwerze zapisz ostatni numer wersji po zmianie stanu i użyj tego numeru, aby sprawdzić, czy nigdy nie zastępujesz nowszej wartości.

+0

+1; najłatwiejszą logiką dla takiej wersji może być '(nowa data) .getTime()' –

+3

+1 JavaScript jest jednokrotnym gwintem, dlatego jQuery będzie wysyłać żądania w kolejności, ale nie ma takiej gwarancji, gdy żądania dotrą do serwera. W praktyce prawie zawsze będą, ale nie piszą żadnej logiki, od której zależą. –

+0

@DavidHedlund Watchout: Może to się nie powieść, gdy czas się zmieni (zmiana czasu użytkownika, synchronizacja z serwerem czasu). –

Powiązane problemy