Architettura java MMORPG lato server


8

Attualmente sto realizzando un gioco MMORPG a turni. Il client dovrebbe funzionare su Android. Ora, il mio amico sta facendo la grafica e io ho seguito le lezioni di gioco (giocatore, armi, ecc.). Ora, se la lotta è iniziata, le classi possono essere manipolate da interfacce (in realtà per il mio partner, è come lavorare con interfacce pure, non ha bisogno di alcun accesso alle classi di implementazione).

Ora dobbiamo introdurre un server di gioco per consentire a più giocatori. E sorgono alcune domande molto importanti:

1) Devo copiare completamente il modello di gioco sul server, senza lasciare classi sul client o è meglio avere 2 copie del modello - 1 sul server e 1 sul dispositivo e completare la sincronizzazione periodica tra quelle?

2) Quale metodo di connessione scegliere tra il client e il server (il client in vista è il telefono Android)? Per quanto riguarda il server, mi rivolgo a Java perché ho una certa esperienza con esso. Ma ora la domanda è: è meglio usare i socket per questa attività o posso usare i servizi REST, o è anche possibile collegarlo in qualche modo al server Java EE che è bello dal mio punto di vista perché rimuove molta programmazione complicazione? Anche se il gioco è multiplayer, è a turni, quindi non deve essere rinnovato molto spesso.

3) Che dire del threading? Ogni cliente dovrebbe avere il proprio thread (in caso di socket)?

4) Esistono libri sulla programmazione del gioco server REAL MMORPG là fuori ???

Risposte:


7

Non copiare l'intero modello di gioco sul server, non desideri caricare tutte le trame e le mesh dettagliate sul tuo server. Mantenerlo il più semplice possibile, gestire tutti i processi importanti come la posizione, la salute, qualsiasi movimento ma non caricare tutto. - NON AFFIDARE MAI IL CLIENTE.

Ci sono molti libri, insieme a più wiki. Ogni fornitore di motori come IdeaFrabrik, Epic Games, Exitgames, Unity (supporta anche mmo's) ha un'ottima documentazione per i propri prodotti. La maggior parte di queste cose è pubblica, quindi hai accesso a soluzioni complete e puoi effettivamente scoprire come funzionano le cose.

Il modo più semplice per trovare un libro di cui hai bisogno è cercare su MMORPG su Amazon, quindi andare alla categoria del libro e scegliere la sottocategoria "programmazione". Se vai su Google otterrai risultati indesiderati ...

Ecco l'elenco dei libri che ho trovato

Non ho approfondito la programmazione dei server, ma in realtà ero vicino alla scelta della soluzione del motore Unity + Photon Cloud per il mio progetto MMORPG. (HeroEngine ha vinto) Il lato server è fatto in questo in C # e una cosa che ricordo fortemente è il modo in cui le cose sono state spiegate nei tutorial.


Non stiamo usando alcun motore perché il gioco non ne richiede uno. Manca di grafica accattivante. Quindi non abbiamo bisogno di Unity con le sue caratteristiche supreme per il 3D. I libri che hai fornito sembrano essere troppo ampi - ancora nessun riferimento al libro che spiega come scrivere un server multiplayer ad alto carico. Ma grazie per il consiglio.
Artem Moskalev,

Devi conoscere la programmazione server-client TCP. "Detto in modo brutale, la programmazione server viene utilizzata anche nei giochi". Devi imparare le sue basi. Questo potrebbe farti iniziare con esso in Java. edn.embarcadero.com/article/31995
Mikolaj Marcisz

Sì, lo so che già =) ho programmato abbastanza di quelli in congiunzione con JMS e semplici server di string-message =) Ecco perché ho chiesto quale è meglio + i socket sono di livello piuttosto basso rispetto a Java EE con cui ho lavorato in precedenza) Non so come sia fatto con i giochi multiplayer perché finora sembra che la programmazione di game server sia totalmente diversa dalla programmazione di siti Web o semplici programmi di scambio di messaggi)
Artem Moskalev,

4

1) Devo copiare completamente il modello di gioco sul server, senza lasciare classi sul client o è meglio avere 2 copie del modello - 1 sul server e 1 sul dispositivo e completare la sincronizzazione periodica tra quelle?

D'accordo con Mikolaj non copiare tutto. Invia il minor numero di dati possibile. Puoi avere le stesse classi (che rappresentano solo il modello di dati, non altre risorse) nel client e nel server, ma non inviarle tramite la rete. Volete serializzarli sul server e deserializzare sul client. Il client deve inviare solo comandi al server.

2) Quale metodo di connessione scegliere tra il client e il server (il client in vista è il telefono Android)? Per quanto riguarda il server, mi rivolgo a Java perché ho una certa esperienza con esso. Ma ora la domanda è: è meglio usare i socket per questa attività o posso usare i servizi REST, o è anche possibile collegarlo in qualche modo al server Java EE che è bello dal mio punto di vista perché rimuove molta programmazione complicazione? Anche se il gioco è multiplayer, è a turni, quindi non deve essere rinnovato molto spesso.

Stai pianificando un MMORPG a turni (non ho idea di come funzionerebbe comunque). Quindi la velocità non è un grosso problema. Puoi utilizzare qualsiasi tipo di servizio, REST potrebbe essere buono, è semplice. Di solito i MMORPG usano UDP (non sicuro, più piccolo, più veloce) per cose come gli aggiornamenti di movimento in cui uno o due pacchetti persi non contano e TCP (sicuro, overhead) per comunicazioni sicure. La maggior parte dei giochi utilizza probabilmente un qualche tipo di protocollo personalizzato compresso e crittografato su UDP e TCP per renderlo veloce e difficile da decifrare.

3) Che dire del threading? Ogni cliente dovrebbe avere il proprio thread (in caso di socket)?

In genere si desidera disporre di un pool di thread. Ogni thread dal pool risponde a una richiesta, quindi viene riciclato. Quando non hai abbastanza thread, puoi considerare il blocco o l'allocazione di più thread.

4) Esistono libri sulla programmazione del gioco server REAL MMORPG là fuori ???

Mikolaj lo ha già cercato su Google per te ...


Potresti approfondire di più sul pool di thread? Se sono presenti socket, il server è in ascolto delle richieste e alloca un nuovo socket per ciascuno. Quei socket con tutte le informazioni in arrivo possono essere incapsulati come lavoro nel thread. Ma come vengono recuperati i thread dal pool di thread se ogni volta che i thread hanno lavori diversi? + quante prese aperte possono contenere un server medio? Sarà più dispendioso in termini di risorse rispetto a REST o no? + in REST non c'è stato di sessione quindi è difficile mantenere le informazioni sul giocatore. Ma resto in Java ha una perfetta integrazione nel server aziendale che è buono
Artem Moskalev,

I libri introdotti riguardano tutto il design OOP di MMORPG, come sembra dai commenti. Per quell'ID piuttosto attenersi a GoF. Ancora una volta, sembra che la programmazione di giochi online multiplayer lato server sia una sorta di conoscenza sacra passata attraverso la generazione =) Tutti i forum / post / libri vengono a quelle idee: "non provare a programmare MMO / Programmare MMO è davvero difficile / MMO non è per un novizio "... e NESSUN CONSIGLIO a tutti ...
Artem Moskalev,


I libri introdotti riguardano tutto il design OOP di MMORPG, come sembra dai commenti. Per quell'ID piuttosto attenersi a GoF. Questa frase non ha senso. Anche costruire un MMORPG equivale a costruire un aereo a reazione. Direi di guadagnare le tue ali con gli aerei di carta.
MartinTeeVarga,

Hai ragione al 100% sugli aerei di carta =) Ma quei libri non riguardano nemmeno gli aerei di carta (per aerei di carta intendo la programmazione lato server mmo) - Ho già imparato che dai commenti su Amazon =) Alcuni di quei libri trattano modelli di progettazione per giochi MMORPG, che possono essere appresi da altri libri migliori, nello stesso contesto di creazione di giochi. + Sto già costruendo un B-2, quindi apprezzo tutti i consigli che posso ottenere. Grazie =)
Artem Moskalev il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.