Dopo aver fatto alcune indagini * ho imparato che potrei potenzialmente avere un problema di concorrenza.
Attualmente sto creando una piattaforma per tornei in ASP.NET MVC 5 con Entity Framework 6. Finora, non ho mai avuto problemi di concorrenza (soprattutto perché sono caduti nello scenario troppo ottimistico). Chiedo soldi per le persone di entrare (tramite PayPal) in alcuni tornei che sono limitati in quantità (diciamo al massimo 32 giocatori). Cosa succederebbe se 50 persone allo stesso tempo provassero ad entrare nel torneo?
Quindi questo presenta una situazione molto simile ai collegamenti "singola quantità" o "problema del carrello del sistema di acquisto con stock" che rimando sopra. Sfortunatamente nessuno di loro ha effettivamente fornito risposte reali. Tuttavia, ho il vantaggio che l'utente deve pagare in anticipo "per mettere il prodotto nel carrello". Ciò significa che non c'è modo di "riservare" o "raccogliere" il "prodotto" prima di pagarlo effettivamente.
Finora, quello che sto pensando di fare è il seguente: L'utente fa clic per registrarsi nel sito. Controlla se non è stata raggiunta la capacità massima. Quindi, crea un "segnaposto temporaneo" per l'utente per elaborare il pagamento. Quindi, quando altri controllano, controllerà entrambi: gli utenti attualmente registrati e quelli nel segnaposto temporaneo.
Ma potrebbe esserci un difetto nel mio modo di pensare:
1 °) Cosa succede se, nel momento in cui l'utente sta per entrare, il limite non è stato raggiunto, ma 10 secondi dopo, quando sta per effettuare l'acquisto, è stato raggiunto il numero massimo di giocatori?
Potrei controllare esattamente prima che il pagamento venga inviato, ma cosa succede se ci sono molti utenti che fanno la stessa cosa? ...
Potrei ordinarli tramite un timestamp e "ordinare-fuori" in un ordine e selezionare solo i primi 32 ... funzionerebbe?
*
Integrazione con un fornitore di pagamenti; Approccio OOP corretto e robusto
Come gestisco il pagamento online per articoli con quantità singola?
Concorrenza ottimistica: panoramica
problema del carrello del sistema di acquisto con magazzino
Come faccio a verificare se il pagamento di terze parti è riuscito?
link
link