Blocco / sblocco automatico dei posti assegnati in un sistema di emissione di filmati [chiuso]

2

Sto cercando di costruire un sistema di biglietteria per film. Ma non sono in grado di capire come risolvere il seguente caso d'uso:

  • Diciamo che ci sono 10 posti cioè S1, S2, S3, S4 ... S10.

  • Ora diciamo che Utente1 ha effettuato l'accesso al sistema e ha selezionato i posti S1 e S2.

  • Entrambi questi posti devono essere automaticamente bloccati per un intervallo di tempo di 15 minuti; in modo che l'Utente1 possa effettuare il pagamento entro questo tempo e confermare i posti.

  • Nel frattempo se un altro utente2 accede al sistema, i posti S1 e S2 devono essere visualizzati come bloccati.

  • I posti saranno sbloccati solo se si verifica il timeout di 15 minuti (o) L'Utente1 interrompe volontariamente il processo di prenotazione.

Qualche idea su come raggiungere questo obiettivo? Possiamo bloccare e sbloccare in modo asincrono evitando il ricaricamento della pagina?

Ho già cercato soluzioni e ho trovato questa domanda correlata: Come gestisco il potenziale problema di concorrenza di effettuare un pagamento a Paypal per un numero limitato di articoli?

Ma non mi ha aiutato. Sono sicuro di dover prendere l'oggetto dallo scaffale per qualche tempo. Ma tecnicamente come realizzarlo? devo aggiornare il database per rendere quel posto come bloccato? se l'ho fatto, come sbloccarlo in caso di fallimento o se l'utente abbandona il sistema? Come aggiornare l'interfaccia utente in modo asincrono?

    
posta madan 18.08.2017 - 20:12
fonte

1 risposta

0

La sfida per il film ticketing è la contesa che picchi quando si avvicina l'ora di inizio del film.

Due parti richiedono molto tempo: la scelta (e alcune persone non si preoccupano se sono vicine l'una all'altra) e il paiement (che viene spesso elaborato da servizi web esterni). Quindi potresti migliorare la situazione scegliendo una delle seguenti opzioni:

Opzione 1: approccio al blocco in tempo reale

Rendi il blocco molto più breve (ad esempio 2 minuti), ma consenti alla sessione di estenderlo ogni volta che l'utente è attivo (eventi mouse e tastiera). Ciò sarebbe anche più bello se la schermata di selezione dell'utente riflettesse i cambiamenti nello stato del sedile.

Opzione 2: l'approccio dell'ottimista

Sii ottimista. Non bloccare e spiega che è primo arrivato, primo servito e prenota il posto alla fine del pagamento. Se i posti desiderati non sono più disponibili, proponi una nuova scelta (ma non è necessario alcun pagamento: può essere prenotata immediatamente) o un rimborso (presumo che il pagamento avvenga su un sistema esterno e che non puoi influenzare la sua gestione delle transazioni ).

Ciò potrebbe tuttavia essere sconvolgente per l'utente se sono rimasti solo pochi posti o se semplicemente non si preoccupano della posizione del posto.

Opzione 3: l'approccio della compagnia aerea

È una variante dell'approccio ottimista, che riduce notevolmente lo stress per gli utenti: chiedi quanti posti, e qual è l'area preferita (ad esempio anteriore, centrale o posteriore). Verificare la disponibilità, effettuare il pagamento, la prenotazione prenoterà i posti consecutivi, se possibile nella zona preferita o altrove, se non. Informare l'utente dei suoi posti prenotati e consentire di scegliere altri posti se non felici.

Funziona meglio quando la maggior parte delle persone non desidera un posto molto specifico, lasciando il sistema che ottimizza l'allocazione riducendo al minimo il blocco.

Come si fa tecnicamente?

Non hai fornito molte informazioni tecniche sul tuo progetto, quindi sarà difficile aiutarti. Un possibile approccio potrebbe essere quello di contrassegnare i posti come prenotati temporaneamente, utilizzando l'ID di sessione, e cancellare la relativa prenotazione se la sessione è scaduta (opzione 1). Un altro approccio sarebbe quello di utilizzare gestione transazionale del database (opzioni 2 e 3): un fallimento nel completare la transazione dimostra che un'altra sessione ha già acquisito il posto.

    
risposta data 19.08.2017 - 10:50
fonte

Leggi altre domande sui tag