2010-09-23 11 views
6

Sto cercando progetti di rete e trucchi specifici per i giochi. Conosco alcuni problemi e ho alcune soluzioni parziali ad alcuni di essi, ma ci possono essere problemi che non riesco ancora a vedere. Penso che non ci sia una risposta definitiva a questo, ma accetterò una risposta che mi piace davvero. Posso pensare a 4 categorie di problemi.Problemi di rete nei giochi

Bad rete

I messaggi inviati dai clienti richiedere un certo tempo per raggiungere il server. Il server non può solo elaborarli FCFS perché non è giusto contro i giocatori con latenza più elevata. Una soluzione parziale per questo sarebbe data/ora sui messaggi ma hai bisogno di 2 cose:

  • Essere in grado di fidarsi dell'orologio dei clienti. (Penso che sia impossibile.)
  • Latenze costanti che puoi misurare. Cosa puoi fare in merito alla latenza variabile?

Un sacco di giochi utilizzano UDP che significa che i messaggi possono essere persi. In tal caso cercano di stimare lo stato del gioco in base alle informazioni che già possiedono. Come fai a sapere se lo stato stimato è corretto o meno dopo che la connessione sta funzionando di nuovo?

Nei giochi MMO il server gestisce una grande quantità di client. Qual è il modo migliore per distribuire il carico? In base alla posizione nel gioco? Associare gruppi di client a server? Puoi evitare di inviare tutto tramite il server?

giocatori lasciando

ho visto 2 comportamenti diversi quando questo accade. Nella maggior parte dei giochi FPS, se il giocatore che ha ospitato il gioco (suppongo che sia il server) lascia che gli altri non possano giocare. Nella maggior parte dei giochi RTS, se un giocatore lascia gli altri, può continuare a giocare senza di lui. Com'è possibile senza un server dedicato? Tutti conoscono lo stato completo? Stanno trasferendo in qualche modo il ruolo del server?

L'accesso alle informazioni

Il prossimo problema può essere risolto da un server dedicato, ma io sono curioso di sapere se si può fare senza. In molti giochi i giocatori non dovrebbero conoscere lo stato completo del gioco. Nebbia della guerra in RTS e muri in FPS sono buoni esempi. Tuttavia, devono sapere se un'azione è valida o meno. Ad esempio, puoi spararmi da lì o sei dall'altra parte della mappa. In questo caso i client devono convalidare le modifiche a uno stato sconosciuto. Questo suona come qualcosa che può essere risolto con un uso intelligente di primitive crittografiche. Qualche idea?

Cheating

Alcuni dei problemi di cui sopra sono facile in un ambiente client di fiducia, ma che non può essere assunto. Ci sono soluzioni che funzionano ad esempio in un 80% di utenti normali - 20% di cheater environment? Puoi davvero creare un software anti-cheat che funzioni (e non richiede cose ridicole come i moduli del kernel)?

Ho letto queste domande e alcune delle risposte https://stackoverflow.com/questions/901592/best-game-network-programming-articles-and-books ma altre risposte collegano a contenuti non disponibili/limitati. Questa è una domanda indipendente dalla piattaforma/sistema operativo, ma sono benvenute anche soluzioni per piattaforme/SO specifici.

+0

Ottima domanda. –

+2

Forse questo sito è più adatto a questa domanda? http://gamedev.stackexchange.com/ – Nakilon

+0

Non mi ero reso conto che esistesse una versione specifica del sito. Grazie, sicuramente lo controllerò. – stribika

risposta

2

Pensare che la crittografia risolverà questo tipo di problema è un errore molto comune e molto grave: il client stesso deve essere in grado di decrittografarlo, quindi è completamente inutile. Non stai aggiungendo sicurezza, stai solo aggiungendo oscurità (e che sarà decodificato).

L'inganno è troppo specifico del gioco. Ci sono alcuni tipi di giochi in cui non possono essere completamente eliminati (aimbots in FPS), e alcuni in cui se non hai sbagliato non sarà affatto possibile (giochi di turni basati su server).

In generale problemi di rete come quelli sono profondamente legati alla previsione che è un argomento molto complicato nel migliore dei casi ed è molto ben spiegato nel famous Valve article su di esso.

+0

So che semplicemente la crittografia dello stato non funzionerà, ma ho visto alcuni usi molto interessanti della crittografia. Come controllare il risultato dei voti senza sapere chi ha votato cosa o crittografia che richiede a più parti di decifrare. Forse qualcosa di simile può essere usato qui. Questi sono piuttosto semplici una volta che l'hai visto, ma davvero difficile scoprire come fare altrimenti. – stribika

+0

Mi piace l'articolo contiene molti dettagli sulla compensazione della latenza. – stribika

2

Bad rete

I giocatori con elevata latenza dovrebbe comprare un nuovo modem. Non penso che sia una buona idea aggiungere ancora più latenza perché una persona nel gioco ha avuto una cattiva connessione. O se intendi piccole differenze di latenza, a chi importa? Renderai le cose più lente e complicate solo se rifiuti di FCFS.

Cheating: aimbots e simili

Si può davvero fare un software anti-cheat che funziona? No, non puoi. Non puoi sapere se stanno eseguendo il tuo programma o un altro programma che si comporta come il tuo.

Cheating: l'accesso alle informazioni

Se si dispone di una connessione sicura con un server dedicato ci si può fidare, allora barare, come vedere più Stato di quanto consentito, dovrebbe essere impossibile.

Ci sono alcuni giochi in cui la crittografia può impedire l'imbroglio. Giochi di carte come il poker, in cui ogni giocatore ha la possibilità di "mischiare il mazzo". Dettagli su wikipedia: Mental Poker.

Con un RTS o un FPS è possibile, in teoria, crittografare la propria parte dello stato del gioco. Quindi inviarlo a tutti e inviare solo le chiavi di decrittazione per le parti che sono autorizzati a vedere o quando sono autorizzati a vederlo. Tuttavia, dubito che nel 2010 possiamo farlo in tempo reale.

Ad esempio, se voglio verificare, potresti trovarti nella posizione B. Quindi ho bisogno di sapere da dove vieni e quando eri lì. Ma se me l'avevi detto prima, sapevo qualcosa che non mi era permesso di sapere. Se me lo dici dopo, puoi dirmi tutto quello che vuoi farmi credere. Avresti potuto dirmelo prima, criptato e dammi la chiave di decodifica quando ho bisogno di verificarlo. Ciò significa che dovrai crittografare ogni mossa effettuata con una chiave di crittografia diversa. Ahia.

Se non stai implementando un sito di poker, l'imbroglio non sarà comunque il tuo problema più grande.

+1

Non si tratta solo di nuovi modem. Anche la distanza fisica dal server contribuisce, così come l'ISP. È chiaro che abbiamo bisogno di un limite sulla quantità di latenza che desideriamo aggiungere. Un giocatore con un RTT di 5 secondi non sarà in grado di giocare, non importa quale sia il motivo per cui rovina il gioco per gli altri 5. Ma (a seconda del gioco) una certa latenza è accettabile. Nei giochi FPS la latenza accettabile è molto bassa e la tolleranza per le differenze è molto bassa (chi ha sparato per primo conta molto). In altri giochi le tolleranze sono più alte per entrambi. Penso che se si riesce a mantenere accettabile la latenza, si potrebbe anche renderla uguale. – stribika

+0

Penso di essere d'accordo sul fatto che gli obiettivi sono inevitabili. Comunque quelli che ho visto sono certamente rilevabili, non suonano niente come un umano. Certo che può essere regolato ... – stribika

+0

+1 per la prima proposta intelligente che ho letto sulla registrazione nei giochi, gg! –

2

Il server non può solo elaborarli FCFS perché non è giusto contro i giocatori con latenza più elevata.

Sì, è possibile. Cercando di indovinare esattamente quanta latenza qualcuno ha non è più giusto come varia la latenza.

In tal caso, tentano di stimare lo stato del gioco in base alle informazioni che hanno già. Come fai a sapere se lo stato stimato è corretto o meno dopo che la connessione sta funzionando di nuovo?

Il server non deve indovinare affatto: conosce lo stato. Il client deve solo indovinare mentre la connessione è inattiva - quando si esegue il backup, verrà inviato il nuovo stato.

Nei giochi MMO il server gestisce una grande quantità di client. Qual è il modo migliore per distribuire il carico? In base alla posizione nel gioco?

Non esiste il "modo migliore". Il partizionamento geografico funziona piuttosto bene, comunque.

È possibile evitare di inviare tutto tramite il server?

Solo per le comunicazioni non affidabili, che in genere sono così basse sulla larghezza di banda che non ha senso.

Nella maggior parte dei giochi RTS, se un giocatore lascia gli altri può continuare a giocare senza di lui. Com'è possibile senza un server dedicato? Tutti conoscono lo stato completo?

Molti giochi RTS mantengono lo stato completo simultaneamente su tutte le macchine.

Alcuni dei problemi di cui sopra sono facili in un ambiente client affidabile ma non può essere assunto.

La maggior parte dei giochi aperti al pubblico devono assumere un ambiente di imbroglione al 100%.

1

Con molte persone che accedono ai giochi su dispositivi mobili, una "cattiva rete" può verificarsi quando un giocatore si trova in un'area con scarsa ricezione o è connesso a una connessione lenta-wifi. Quindi non è solo un problema di persone che si connettono in aree scarsamente popolate. Con i client mobili, le "cattive reti" possono verificarsi molto spesso e di solito è ESTREMAMENTE difficile da diagnosticare.

UDP si traduce in perdita di pacchetti, ma anche i giochi che utilizzano TCP e HTTP possono presentare problemi in cui la comunicazione del client & del server rallenta fino a quando i pacchetti non vengono verificati. Con la comunicazione UDP, la compensazione per la perdita di pacchetti dipende in genere da ciò che i pacchetti contengono. Se si parla di dati di movimento, in genere se i pacchetti non vengono ricevuti, il server interpola la traiettoria precedente e apporta un cambiamento di posizione. Di solito è consuetudine al gioco come viene gestito, motivo per cui le persone spesso evitano UDP a meno che il loro tipo di gioco lo richieda. Spesso per gestire un'elevata latenza di rete, i giochi di problemi degradano automaticamente la quantità di funzionalità disponibili per gli utenti in modo che possano comunque interagire con il gioco senza causare all'utente di essere preso a calci o sperimentare troppe funzioni non funzionanti.

ottimale si vuole avere uno strumento di registrazione come Loggly disponibili che possono aiutare a trovare gli errori legati alla cattiva connessione e la latenza e vi mostrerà le condizioni sui client e del server nel momento in cui è accaduto, questa visibilità consente di diagnosticare i problemi comuni gli utenti sperimentano e sviluppano strategie per affrontarli.

Giocatori che partono La maggior parte dei giochi in questi giorni ha server dedicati, quindi questo problema è principalmente discutibile. Tuttavia, a volte sì, il server può essere cambiato in un altro client.

Cheating è estremamente difficile prevedere come i giocatori potranno barare e creare un sistema a prova di frode nessuno può incidere. Oggigiorno, molte strategie di individuazione dei cheat si basano sull'analisi euristica dei dati delle informazioni di analisi e di analisi comportamentale per individuare anomalie quando si verificano e contrassegnarle per la revisione. Dovresti assolutamente cercare di imbrogliare il più possibile, ma hai anche bisogno di un sistema di rilevamento precoce in grado di individuare nuovi difetti che le persone stanno sfruttando.

Problemi correlati