server di stato su heroku

1

Sto costruendo un gioco a quiz multiplayer in cui il server è scritto in NodeJS e ospitato su Heroku.

Mi sono imbattuto in un problema quando il server doveva avvisare gli utenti che il tempo necessario per rispondere a una domanda perché Heroku riavvia i server ogni tanto e può riavviare il mio server nel bel mezzo di un gioco.

C'è un modo elegante per risolvere questo problema?

    
posta Ephi Gabay 24.04.2016 - 13:33
fonte

2 risposte

3

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.

    
risposta data 24.04.2016 - 14:29
fonte
2

Puoi inviare un payload firmato con timestamp (oltre a ID domanda, ID client, ecc.) al cliente insieme alla domanda. Quando si risponde alla domanda il cliente deve restituire il payload firmato. Il server può quindi verificare la risposta senza mantenere alcuno stato riguardo a quando la domanda è stata inviata al cliente. Il client stesso fornisce lo stato firmato per il server. Il server deve semplicemente verificare la firma e confrontare il timestamp con l'ora corrente.

    
risposta data 24.04.2016 - 15:32
fonte

Leggi altre domande sui tag