script "Match Making", un modo senza coinvolgere il database e php?

0

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.

  1. 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.
  2. 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.
  3. 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)

    
posta Drenferalis 11.02.2014 - 15:53
fonte

2 risposte

1

Dato che non hai molti giocatori, non consiglierei di spendere troppo tempo su questo problema, ma continuerai con gli altri tuoi servizi.

Userei uno script AJAX che esegue la scansione di uno script php ogni secondo, in cui lo script PHP sta cercando un avversario.

Come funzionerebbe?  - Un pulsante "Trova corrispondenza" chiama uno script PHP esterno tramite AJAX

  • Lo script PHP verifica se il giocatore con l'hash di accesso corrispondente è in coda, se non aggiunge il giocatore, quindi cerca un avversario e restituisce i risultati
  • Se il giocatore è in coda (alla seconda o più chiamate), salta la registrazione della coda e inizia immediatamente la ricerca di un avversario
  • Se viene trovata una corrispondenza, crea una tabella "matchfound" con vari stati, come "waiting for player 1" / "waiting for player 2" / "player 2 declined" etc
  • Con l'invio di queste informazioni ai 2 client ogni secondo, si passa semplicemente lo stato corrente in json ai client, dove si ha il codice di presentazione (con ad esempio una ruota girevole quando si attende un avversario ecc.)

Questo sistema supporterà molti giocatori, ma se stai cercando di creare un sistema di match match di grandi dimensioni con migliaia di giocatori contemporaneamente, dovresti considerare di cercare altre soluzioni allora JavaScript / PHP, dove l'utilizzo di socket sarebbe il migliore soluzione.

    
risposta data 13.02.2014 - 09:03
fonte
0

Ti suggerisco di esaminare i websocket (come pusher.com o il suo slanger o socket.io). Ti permette di mantenere le connessioni con i client aperti e quindi vedere se i giocatori sono ancora attivi o meno. Rimuove la necessità di chiamate Ajax a qualsiasi back-end.

    
risposta data 13.02.2014 - 09:47
fonte

Leggi altre domande sui tag