Mi ricorda Monte sohan(il primo screen) e deserto yongbi gli altri
Sì, vogliamo infondere una sensazione di familiarità in alcune zone. Così il giocatore non si trova completamente spaesato e ha una reazione del tipo: "
ah, figo! mi ricordo di questa parte!".
Cosi, per curiosità, che pattern usate per la comunicazione client-server?
Mi mandi a nozze con domande sull'architettura di networking, dato che è ciò di cui mi occupo in questo progetto (assieme al gameplay server side).
Il nostro networking corrente è organizzato in due macro categorie: la parte per lo sviluppo del gameplay e la parte per la gestione del network (per l'environment di produzione e per quello di debug).
La divisione in due categorie sembra banale, ma di fatto non lo è: l'aggiunta di layer serve a scindere la complessità dell'architettura di networking.
Infatti, il codice del gameplay interagisce con il codice di networking tramite wrapper e interfacce: diventa molto facile, quindi, cambiare il layer di networking sottostante.
Tutto questo perché?
Perché ho più layer di networking, intercambiabili in base alla necessità.
Per velocizzare lo sviluppo ho utilizzato una piccola libreria basata su TCP e IOCP, questa è stata impiegata per la realizzazione di una server app single instance utilizzata per il debug rapido del gameplay.
Parallelamente, sto realizzando una architettura distribuita (basata su TCP, UDP e RUDP) nella quale i server possono essere molteplici e possono essere hostati su macchine fisiche differenti, le quali comunicano e vengono gestite da alcuni node manager che si occupano del load balancing e dell'assegnazione delle connessioni ai diversi server di gioco.
Entrambe le soluzioni sono basate sullo scambio di messaggi che scatenano gli eventi corrispondenti su server o client.
Come puoi notare, la divisione in layer è stata utilissima: l'architettura distribuita è un grosso lavoro da fare, che avrebbe bloccato lo sviluppo del gameplay, che invece è stato sviluppato parallelamente grazie all'aiuto dell'architettura più semplice.
P.S.: ho richiesto all'autore della piccola libreria che sto utilizzando ora di sviluppare le funzionalità che parallelamente sto sviluppando anche io. Preferirei che lo finisse prima di me, in modo che io possa utilizzare qualcosa di già testato, anziché dover fare tutti i test da solo su una libreria mia.