Sto scrivendo una sceneggiatura di matchmaking per un gioco attraverso un portale web. Negli ultimi giorni ho esaminato le diverse opzioni e credo che il seguente approccio sarebbe il più ottimale, ma mi piacerebbe l'opinione degli altri.
- Ottieni i requisiti per i giocatori attraverso un modulo web (metodo GET) e metti il giocatore in coda (voce del database mySQL con data e ora e requisiti di corrispondenza) per 1 ora.
- Nella pagina di invio esegui uno script ajax ogni minuto che contatta uno script php che verifica quanto segue:
- Un giocatore è ancora nel sistema, se la loro ora è finita o il loro script ajax non è stato eseguito in 5 minuti rimuoverli dal database. Tempo di ritorno.
- Il giocatore in coda è contrassegnato per una partita?
- Se sì, metti entrambi i giocatori nella tabella delle partite in e rimuovi entrambi i giocatori dalla coda e invia le variabili di corrispondenza.
- Se no, continua.
- I giocatori rimanenti corrispondono ai requisiti attuali dei giocatori?
- Se sì:
- Il giocatore è lo stesso che cerca una corrispondenza
- Se no: restituisce le variabili di corrispondenza. Contrassegna un altro giocatore.
- Se sì: corrispondenza di ritorno non trovata.
- Se no: corrispondenza di ritorno non trovata.
- Una volta ricevute le variabili di corrispondenza, la pagina verrà aggiornata con jquery, inclusa una nuova richiesta Ajax che chiamerà un nuovo script php ogni 30 secondi per scoprire se entrambi i giocatori accettano la partita. I possibili risultati dell'ajax sono: 0 in attesa, 1 accettato, 2 in diminuzione. Ci sarà anche un pulsante che invierà immediatamente la risposta dei giocatori allo script php attraverso ajax che si disabiliterà tramite jquery quando viene spinto. Quando entrambi i giocatori accettano la pagina, utilizzeranno nuovamente jquery per visualizzare le istruzioni per iniziare la partita.
C'è un modo più pulito o meno intenso per fare ciò con o senza il database e il php?
Note:
Nessun codice è stato ancora scritto.
Il sistema non avrà più di 100 giocatori in coda in qualsiasi momento. (Molto probabilmente un picco di 25)