problema :
Fare un videogioco presenta le seguenti sfide sullo storage variabile:
- invia gli stati del player ogni 50-200ms, quindi memorizza la posizione / rotazione nel modo più efficiente possibile.
- memorizza grandi blocchi di dati per ciascun giocatore in merito ai loro cooldown, abilità e loadout
- tutte le variabili devono ruotare attorno all'ID di connessione assegnato quando si connettono al server, non a chi dicono di essere
soluzioni considerate finora:
- utilizza un numero intero come " ID giocatore " che ricerca i dati su dozzine di matrici . Informare il cliente di questo numero relativo a ciascun giocatore affinché possa utilizzarlo nell'API back-end. Inconveniente - brutto e ingombrante sul lato server.
- mappa ogni " ID giocatore " in una classe . Rifinitura: è necessario iterare solo per ottenere le posizioni / rotazioni ogni 50-200 ms.
- crea nuovamente una matrice di strutture utilizzando " ID giocatore " come indice. Inconveniente, come sopra.
Tuttavia, ognuna di queste soluzioni che utilizzano "l'id del giocatore" come indice non funziona bene quando la concorrenza è instabile, con i giocatori che vanno e vengono. Esistono tre approcci (alla struttura effettiva dei dati inviati):
- rispecchia la lista / matrice sui client, quindi notifica i client quando è necessario apportare una modifica (ad esempio: giocatore x a sinistra, tutti i player > x down iterate). Questo ha una locazione per rompere le cose tra il ritardo.
- collega l'id del giocatore a ciascun aggiornamento posizionale anziché inferire che i client possono dedurlo dall'indice dell'array.
- invia un array statico con un numero invariato di slot, tutte le posizioni non occupate vengono inviate comunque. Ci dovrebbe essere un punto di crossover in cui questo è più efficiente di includere gli id se stai utilizzando una certa quantità di esso.
Quale sarebbe la soluzione migliore per questo scenario?