2012-07-03 18 views
7

Tengo una aplicación donde los usuarios pueden cambiar un valor de alternar entre true y false usando un pequeño interruptor/botón y el cambio se envía automáticamente al servidor sin que el usuario presione explícitamente algo como "guardar".¿Se garantiza que las solicitudes AJAX subsiguientes se recibirán en orden?

Ahora, si el usuario presiona el interruptor de palanca dos veces en rápida sucesión, ¿es posible que el servidor reciba los paquetes desordenados y termine almacenando el valor incorrecto? Y por servidor me refiero a la lógica de la aplicación que se ejecuta en el servidor, no a la pila de red del sistema operativo.

Sé que los paquetes TCP están numerados de modo que el sistema operativo receptor los ordena antes de pasarlos a la aplicación, y HTTP se ejecuta sobre TCP. Sin embargo, la parte que me interesa es en qué circunstancias HTTP crea/no crea una nueva conexión TCP.

N.B. Estoy usando jQuery para enviar las solicitudes de AJAX y asumo que se garantiza que se envíen en el mismo orden que las llamadas a la biblioteca de jQuery. ¿Es esta suposición válida?

Respuesta

5

No existe tal garantía en el protocolo http. Incluso si algunas implementaciones en realidad pueden garantizarlo, no debe confiar en él.

Puede hacer esto: mantenga un conteo de clics (o llámelo número de versión, si lo prefiere) y envíelo al servidor. En el servidor, almacene el último número de versión cuando cambie el estado, y use este número para verificar que nunca sobrescriba un valor más reciente.

+0

+1; La lógica más sencilla para dicho control de versiones podría ser '(new Date) .getTime()' –

+3

+1 JavaScript tiene un único hilo, por lo tanto, jQuery enviará las solicitudes en orden, pero no hay garantía de cuándo las solicitudes llegarán al servidor. En la práctica, casi siempre lo harán, pero no escriben ninguna lógica para depender de ello. –

+0

@DavidHedlund Watchout: Esto puede fallar cuando cambia la hora (cambio de hora explícito del usuario, sincronización del servidor horario). –

Cuestiones relacionadas