2012-07-03 14 views
7

Possiedo un'app in cui gli utenti possono modificare un valore di commutazione tra true e false utilizzando un piccolo interruttore/pulsante e la modifica viene automaticamente inviata al server senza richiedere all'utente di premere esplicitamente qualcosa come "salva".Le richieste AJAX successive sono garantite per essere ricevute in ordine?

Ora se l'utente preme l'interruttore a levetta due volte in rapida successione, è possibile che il server riceverà i pacchetti fuori servizio e quindi finirà per memorizzare il valore errato? E per server intendo la logica dell'app in esecuzione sul server, non lo stack di rete del SO.

So che i pacchetti TCP sono numerati in modo che il sistema operativo di destinazione li ordina prima di passarli all'applicazione e HTTP viene eseguito su TCP. Tuttavia la parte che mi incuriosisce è in quali circostanze HTTP crea/non crea una nuova connessione TCP.

N.B. Sto usando jQuery per inviare le richieste AJAX e presumo che siano garantite per essere inviate nello stesso ordine delle chiamate alla libreria jQuery. Questa ipotesi è valida?

risposta

5

Non esiste tale garanzia nel protocollo http. Anche se alcune implementazioni potrebbero effettivamente garantirlo, non dovresti fare affidamento su di esso.

È possibile eseguire questa operazione: mantenere un conteggio dei clic (o chiamarlo numero di versione se si preferisce) e inviarlo al server. Sul server, memorizzare l'ultimo numero di versione quando si modifica lo stato e utilizzare questo numero per verificare di non sovrascrivere mai un valore più recente.

+0

+1; la logica più semplice per tale controllo delle versioni potrebbe essere '(new Date) .getTime()' –

+3

+1 JavaScript è a thread singolo, quindi jQuery invierà le richieste in ordine, ma non esiste alcuna garanzia per quando le richieste arriveranno sul server. In pratica quasi sempre lo faranno ma non scrivono alcuna logica per dipendere da ciò. –

+0

@DavidHedlund Watchout: questo può fallire quando il tempo cambia (cambio orario esplicito dell'utente, sincronizzazione time server). –

Problemi correlati