Nel mio progetto, creerò molti minigiochi. Questi mini giochi possono durare da 30 secondi a 1 settimana (la durata del gioco viene decisa quando viene creata ed è fissa).
Il numero di giochi concorrenti può essere grande (più di 1 partita per utente e speriamo di avere molti utenti ovviamente: -)).
Nulla accade veramente durante il gioco. Sono composti solo da una condizione vincente e un tempo di fine.
Una volta che il gioco è terminato, ho bisogno che il server controlli le condizioni vincenti (usando un servizio remoto) e finalizzi il gioco (decidi chi ha vinto e dai punti). Durante il gioco, il server non ha bisogno di gestirlo.
Puoi pensare ai giochi come alle scommesse. Qualcuno scommette che succederà qualcosa in 30 secondi e dopo 30 secondi ho bisogno di verificare se qualcosa è realmente accaduto e aggiornare il sistema.
La latenza della finalizzazione del gioco dovrebbe essere molto veloce, specialmente per le partite brevi. Non più di un secondo o due. Io, per un gioco di 30 secondi, dovrei essere in grado di aggiornare se ha vinto o perso un secondo o due dopo la fine.
Ho pensato di mantenere ogni gioco su una riga in una tabella sql e pianificare un'attività da eseguire quando finisce e finalizzarla.
Ad esempio, un utente inizia una partita di 1 minuto. Il server creerà il gioco nel db e pianificherà un'attività da eseguire in 1 minuto (e passerà l'id del gioco). Quando l'attività si innesca, finalizzerà il gioco e aggiornerà il suo stato nel db.
Ci sono altri modi per risolvere questo problema? Forse qualcosa che non richiede un compito per partita? Ho pensato anche di avere 1 compito che controllerà tutti i giochi finiti, ma per i giochi brevi (ad esempio 30 secondi) il tempo di polling deve essere molto breve e non sono sicuro di quanto possa scalare.