Nota: questa è una domanda teorica che soppesa i pro e i contro dell'istanza di un oggetto server, l'architettura di livello non è l'argomento della domanda.
La mia domanda è semplicemente se i miei pensieri sono corretti, o se mi sono perso qualcosa. Se ho perso qualcosa che cosa ho perso?
Dato il contesto di un MMORPG, architettura a 2 livelli in .NET C # in cui il client è il livello di logica Presentation / Business e il server è il livello dati che conserva i dati e lo stato di tutti i personaggi nel gioco.
Quale istanza dell'oggetto server sarebbe più appropriata, perché e perché gli altri due non dovrebbero essere appropriati.
I miei pensieri sono i seguenti:
Le mie definizioni: Singleton
- Esiste un singolo oggetto Server che fornisce servizi a tutti i client
- Ogni client esegue in genere le chiamate su un thread diverso nel server oggetto
- L'oggetto server viene creato durante l'inizializzazione o il primo accesso dal cliente.
- L'oggetto server viene distrutto al termine (ad es. la terminazione manuale del programma server)
- L'oggetto server memorizza tutti i dati e gli stati del client. Dati e stato vengono memorizzati fino a quando l'oggetto server non è terminato
Per cliente
- Esiste un oggetto server per ogni cliente.
- Ogni server oggetto viene creato quando il client si connette al server
- Ogni oggetto server viene distrutto quando il client si disconnette dal server
- Ogni oggetto server memorizza tutti i dati e lo stato per il proprio client
- I dati e lo stato vengono memorizzati solo quando un client è connesso, dopo che un client ha disconnesso i dati e lo stato è stato perso
Per chiamata
- C'è un oggetto server per ogni chiamata al server da un client
- Un oggetto server viene creato quando un client chiama il metodo server
- L'oggetto server viene distrutto al termine della chiamata
- I dati vengono memorizzati solo per quella chiamata, mentre la chiamata viene eseguita, dopo che una chiamata ha terminato i dati e lo stato è stato perso
Con questo in mente le mie giustificazioni per la domanda:
Singleton sarebbe il più appropriato, poiché l'oggetto server memorizzerebbe tutti i dati e gli stati di tutti i caratteri indipendentemente dal fatto che un client (per quel personaggio) sia connesso.
Per chiamata non sarebbe affatto appropriato, perché i dati sarebbero conservati solo mentre una particolare chiamata è in elaborazione, perdendo così dati e stato quando nessuna chiamata è in elaborazione
per client sarebbe più appropriato di una chiamata, ma inferiore al singleton perché quando i client disconnettono i loro caratteri i dati e lo stato sono persi
Mi scuso se il layout della mia domanda non è il migliore, questo è il mio primo post.