2012-07-03 34 views
7

我有一個應用程序,用戶可以使用一個小小的切換開關/按鈕在truefalse之間更改切換值,並且更改會自動發送到服務器,而不需要用戶明確按下「保存」之類的內容。是否保證按順序接收後續的AJAX請求?

現在,如果用戶快速連續兩次按下切換開關,服務器是否有可能接收到亂序的數據包,從而最終存儲錯誤的值?而服務器是指服務器上運行的應用程序邏輯,而不是OS網絡堆棧。

我知道TCP數據包被編號,所以接收的操作系統在將它們傳遞給應用程序之前對它們進行排序,並且HTTP在TCP之上運行。然而,我很好奇的部分是HTTP在哪些情況下創建/不創建新的TCP連接。

N.B.我使用jQuery來發送AJAX請求,我假設它們保證以與jQuery庫調用相同的順序發送。這個假設是否有效?

回答

5

http協議中沒有這樣的保證。即使某些實現可能確實可以保證它,但不應該依賴它。

您可以這樣做:維護點擊次數(如果您願意,可以將其稱爲版本號),然後將其發送到服務器。在服務器上,當您更改狀態時存儲上一個版本號,並使用此編號檢查是否永遠不會覆蓋最近的值。

+0

+1;這種版本控制的最簡單的邏輯可能是'(new Date).getTime()' –

+3

+1 JavaScript是單線程的,因此jQuery將按順序發送請求,但是沒有這樣的保證來確定請求何時到達服務器。在實踐中,他們幾乎總是會但不寫任何依賴它的邏輯。 –

+0

@DavidHedlund監控:當時間改變時(用戶的顯式時間改變,時間服務器同步),這可能會失敗。 –

相關問題