Non so se ci sia una soluzione più elegante, ma probabilmente finirà per persistere il timeout della domanda e chiedendo al database se il valore è ancora valido e se il client fa il tempo scaduto logic.
La prima opzione, ovviamente, è semplicemente avere una verifica del client, in cui un utente sceglie di rispondere a una domanda, interroga il server e ottiene una risposta in un formato che potrebbe essere simile a questo:
{
"questionId": "eJ3s9CxfAdwacCP68B",
"question": "Who is the president of the U.S.A.?"
"timeLimit": {
"hours": 0,
"minutes": 1,
"seconds": 30
}
}
Quando i dati vengono recuperati con successo, la finestra di dialogo della risposta è disponibile solo fino a quando la percentuale di% co_de lo consente. Successivamente l'input potrebbe essere disabilitato.
Ovviamente questo risolve il problema solo per le persone con poca o pochissima conoscenza del computer, i geek semplicemente modificano il codice sorgente del tuo sito web, abilitano nuovamente l'input e inviano comunque le loro risposte.
Qui è dove devi inserire anche la verifica del server. Un utente chiede di recuperare la domanda con l'id timeLimit
, durante questa operazione, viene creato un record nel database che comprende l'id utente, l'ID domanda e la scadenza (aggiungendo la durata al datetime corrente).
Successivamente, quando un utente fa clic per inviare la domanda, invia la risposta al server e il server verifica il valore del database e il datetime corrente, indipendentemente dal fatto che la domanda possa ancora rispondere, restituendo eJ3s9CxfAdwacCP68B
quando non è possibile.
Non ho lavorato con heroku, ma speriamo che il database mantenga i suoi dati dopo il riavvio. In questo caso, questa soluzione è abbastanza semplice da implementare, la finestra di dialogo time up è ignorante del server e gli utenti non sono autorizzati a inviare le risposte dopo che è scaduto il loro tempo per la domanda.