2012-07-03 3 views
7

У меня есть приложение, в котором пользователи могут изменять значение переключения между true и false с помощью небольшого переключателя/кнопки переключения, и это изменение автоматически отправляется на сервер, не требуя от пользователя явно нажать что-то вроде «сохранить».Выполняются ли последующие запросы AJAX в порядке?

Теперь, если пользователь дважды нажимает тумблер дважды подряд, возможно ли, что сервер будет получать пакеты не в порядке и тем самым сохранить неправильное значение? И сервером я имею в виду логику приложения, работающую на сервере, а не сетевой стек OS.

Я знаю, что TCP-пакеты нумеруются, поэтому принимающая ОС сортирует их перед передачей их в приложение, а HTTP работает поверх TCP. Тем не менее, мне интересно, в каких обстоятельствах HTTP создает/не создает новое TCP-соединение.

N.B. Я использую jQuery для отправки запросов AJAX, и я предполагаю, что они будут отправлены в том же порядке, что и вызовы библиотеки jQuery. Допустимо ли это предположение?

ответ

5

В протоколе http нет такой гарантии. Даже если некоторые реализации могут фактически гарантировать это, вы не должны полагаться на это.

Вы можете сделать это: сохранить количество кликов (или назвать его номером версии, если хотите), и отправить его на сервер. На сервере сохраните последний номер версии при изменении состояния и используйте этот номер, чтобы проверить, что вы никогда не перезаписываете последнее значение.

+0

+1; Простейшая логика для такого управления версиями может быть '(новая дата) .getTime()' –

+3

+1 JavaScript однопоточный, поэтому jQuery будет отправлять запросы по порядку, но нет такой гарантии, когда запросы будут поступать на сервер. На практике они почти всегда будут, но не писать никакой логики, чтобы зависеть от нее. –

+0

@DavidHedlund Watchout: Это может завершиться неудачно при изменении времени (явное изменение времени пользователя, синхронизация времени сервера). –

Смежные вопросы