Come riscrivere un server MMOG TCP progettato per essere eseguito in una singola macchina, in modo distribuito? [chiuso]

1

Ho un server MMOG in esecuzione su C ++, usando i winsocket. Il mio server non supporterà più di 200 giocatori. Ho avuto l'idea di riprogettarlo in modo che utilizzasse più server invece di uno, quindi, forse, ad esempio, ogni server potrebbe prendersi cura di un numero di giocatori e, se fosse troppo arretrato, potrebbe trasferire la responsabilità di quello giocatore ad altro server. Non sono sicuro di come programmare una logica di gioco coerente come quella, però. Esistono tecniche per questo?

    
posta Dokkat 08.03.2012 - 21:32
fonte

3 risposte

2

Hai 2 domande qui.

Il primo cosa devo fare per convertire da un singolo server a un ambiente di elaborazione distribuito?

Devi imparare a programmare applicazioni di calcolo distribuito. Ci sono parecchi libri su questo fuori. Ci sono persino delle lezioni universitarie che insegnano questa abilità. Puoi trovare anche alcune lezioni online. Una volta che hai imparato che dovrai ridisegnare il tuo gioco per lavorare in un sistema distribuito. Probabilmente richiederà una revisione quasi completa del tuo codice.

In secondo luogo, come faccio a gestire i miei attacchi DDOS dai miei concorrenti? Qui è fuori tema ma è una buona domanda per IT Security SE

    
risposta data 08.03.2012 - 22:33
fonte
1

La prima cosa che devi pensare riguarda la partizione. Ossia, dividere i giocatori in gruppi che di solito non interagiscono. Di quante partizioni hai puoi avere più server (puoi leggere di più con la metodologia PCAM di partizionamento link ). D'altra parte i sistemi che fanno pensare come i tuoi hanno solitamente i loro client connessi a più di un server contemporaneamente per avere un failover (ma questo è più difficile da fare).

    
risposta data 30.10.2012 - 22:38
fonte
0

La prima cosa che devi fare è profilo cosa lo rende lento o "laggy". Capire il problema. È una limitazione del sistema operativo (troppi socket aperti)? Il server utilizza il 100% della CPU? Il DDOS sta inondando la rete e rallentandola? In caso contrario, puoi fare una profilazione del tuo codice per determinare quali sono i colli di bottiglia attuali?

Il tuo codice è multi-thread? In caso contrario, e se il gioco è vincolato alla CPU, un buon miglioramento potrebbe essere quello di avere più thread. Questo sarebbe il primo passo verso un sistema distribuito. Si potrebbe avere un gestore client / pool di connessioni e un thread separato che rappresenta lo stato del gioco e intraprende azioni dal gestore e le applica. È difficile speculare senza saperne di più sulla struttura del tuo programma.

    
risposta data 31.10.2012 - 00:10
fonte

Leggi altre domande sui tag