Istanza dell'oggetto server .NET: Singleton vs Per Call vs Per Client nel contesto di un'architettura a 2 livelli

1

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.

    
posta JoshuaJames 18.06.2016 - 05:53
fonte

0 risposte

Leggi altre domande sui tag