Architecture java côté serveur MMORPG

8

Je fais actuellement un jeu MMORPG, au tour par tour. Le client est censé fonctionner sur Android. Maintenant, mon ami fait les graphismes, et j'ai suivi les cours de jeu (joueur, armement, etc.). Maintenant, si le combat est lancé, les classes peuvent être manipulées par des interfaces (en fait pour mon partenaire, c'est comme travailler avec des interfaces pures, il n'a besoin d'aucun accès aux classes d'implémentation).

Maintenant, nous devons introduire un serveur de jeu pour permettre à plusieurs joueurs. Et quelques questions très importantes se posent:

1) Dois-je copier complètement le modèle de jeu sur le serveur, ne laissant aucune classe sur le client ou est-il préférable d'avoir 2 copies du modèle - 1 sur le serveur et 1 sur l'appareil et de terminer la synchronisation périodique entre celles-ci?

2) Quelle méthode de connexion choisir entre le client et le serveur (le client en vue est le téléphone Android)? Quant au serveur - je me tourne vers java car j'ai une certaine expérience avec lui. Mais maintenant, la question est - est-il préférable d'utiliser des sockets pour cette tâche ou je peux utiliser les services REST, ou il est même possible de le connecter en quelque sorte au serveur Java EE qui est cool de mon point de vue car il supprime beaucoup de programmation complication? Même si le jeu est multijoueur, il est au tour par tour, il n'a donc pas besoin d'être renouvelé très souvent.

3) Et le filetage? Chaque client doit-il avoir son propre thread (en cas de sockets)?

4) Existe-t-il des livres sur la programmation de jeux sur serveur REAL MMORPG ???

Artem Moskalev
la source

Réponses:

7

Ne copiez pas l'intégralité du modèle de jeu sur le serveur, vous ne souhaitez pas charger toutes les textures et les maillages détaillés sur votre serveur. Restez aussi simple que possible, gérez tous les processus importants tels que l'emplacement, la santé, tout mouvement mais ne chargez pas tout. - NE JAMAIS FAIRE CONFIANCE AU CLIENT.

Il existe de nombreux livres, ainsi que plusieurs wiki. Chaque fournisseur de moteur comme IdeaFrabrik, Epic Games, Exitgames, Unity (prend également en charge les mmo) dispose d'une très bonne documentation pour ses produits. La plupart de ces éléments sont publics, vous avez donc accès à des solutions complètes et vous pouvez réellement découvrir comment les choses fonctionnent.

Le moyen le plus simple de trouver un livre dont vous avez besoin est de rechercher Amazon pour MMORPG, puis allez dans la catégorie du livre et choisissez la sous-catégorie "programmation". Si vous le google, vous obtiendrez des résultats indésirables ...

Voici la liste des livres que j'ai trouvés

Je ne suis pas allé profondément dans la programmation de serveurs, mais en fait, j'étais proche de choisir la solution de moteur Unity + Photon Cloud pour mon projet MMORPG. (HeroEngine a gagné) Le côté serveur se fait dans celui-ci en C # et je me souviens fortement de la façon dont les choses ont été expliquées dans les tutoriels.

Mikolaj Marcisz
la source
Nous n'utilisons aucun moteur car le jeu n'en nécessite pas. Il manque des graphismes sympas. Nous n'avons donc pas besoin d'Unity avec ses fonctionnalités suprêmes pour la 3D. Les livres que vous avez fournis semblent trop larges - toujours aucune référence au livre qui explique comment écrire un serveur multijoueur à charge élevée. Mais merci pour les conseils.
Artem Moskalev
Vous devez vous renseigner sur la programmation serveur-client TCP. "En le disant de manière brutale, la programmation serveur est également utilisée dans les jeux". Vous devez apprendre sa base. Cela pourrait vous aider à démarrer avec Java. edn.embarcadero.com/article/31995
Mikolaj Marcisz
Oui, je sais que déjà =) J'ai programmé suffisamment de ceux-ci en conjonction avec JMS et des serveurs de messages de chaîne simples =) C'est pourquoi j'ai demandé ce qui est le meilleur + les sockets sont de niveau assez bas par rapport à Java EE avec lequel j'ai travaillé précédemment) Je ne sais tout simplement pas comment cela se fait avec les jeux multijoueurs car jusqu'à présent, il semble que la programmation du serveur de jeu soit totalement différente de la programmation de sites Web ou de simples programmes d'échange de messages)
Artem Moskalev
4

1) Dois-je copier complètement le modèle de jeu sur le serveur, ne laissant aucune classe sur le client ou est-il préférable d'avoir 2 copies du modèle - 1 sur le serveur et 1 sur l'appareil et de terminer la synchronisation périodique entre celles-ci?

D'accord avec Mikolaj ne copiez pas tout. Envoyez le moins de données possible. Vous pouvez avoir les mêmes classes (représentant uniquement le modèle de données, pas d'autres actifs) dans le client et le serveur, mais ne les envoyez pas sur le net. Vous souhaitez les sérialiser sur le serveur et les désérialiser sur le client. Le client doit envoyer uniquement des commandes au serveur.

2) Quelle méthode de connexion choisir entre le client et le serveur (le client en vue est le téléphone Android)? Quant au serveur - je me tourne vers java car j'ai une certaine expérience avec lui. Mais maintenant, la question est - est-il préférable d'utiliser des sockets pour cette tâche ou je peux utiliser les services REST, ou il est même possible de le connecter en quelque sorte au serveur Java EE, ce qui est cool de mon point de vue car il supprime beaucoup de programmation complication? Même si le jeu est multijoueur, il est au tour par tour, il n'a donc pas besoin d'être renouvelé très souvent.

Vous prévoyez un MMORPG au tour par tour (je ne sais pas comment cela fonctionnerait cependant). La vitesse n'est donc pas vraiment un problème. Vous pouvez utiliser n'importe quel type de service, REST peut être bon, c'est simple. Habituellement, les MMORPG utilisent UDP (non sécurisé, plus petit, plus rapide) pour des choses comme les mises à jour de mouvement où un ou deux paquets perdus n'ont pas d'importance et TCP (sécurisé, surcharge) pour une communication sécurisée. La plupart des jeux utilisent probablement une sorte de protocole personnalisé compressé crypté sur UDP et TCP pour le rendre rapide et difficile à craquer.

3) Et le filetage? Chaque client doit-il avoir son propre thread (en cas de sockets)?

En règle générale, vous souhaitez disposer d'un pool de threads. Chaque thread du pool traite une demande, puis est recyclé. Lorsque vous n'avez pas assez de threads, vous pouvez envisager de bloquer ou d'allouer plus de threads.

4) Existe-t-il des livres sur la programmation de jeux sur serveur REAL MMORPG ???

Mikolaj a déjà fait une recherche sur Google pour vous ...

MartinTeeVarga
la source
Pourriez-vous nous en dire plus sur le pool de threads? S'il y a des sockets, le serveur écoute les requêtes et alloue un nouveau socket pour chacune. Ces sockets avec toutes les informations entrantes peuvent être encapsulées en tant que travail sur le thread. Mais comment les threads sont-ils récupérés du pool de threads si à chaque fois ces threads ont des tâches différentes? + combien de sockets ouverts peuvent contenir un serveur moyen? Sera-t-il plus gourmand en ressources que REST ou non? + dans REST, il n'y a pas d'état de session, il est donc difficile de conserver les informations du joueur. Mais reste en java a une intégration parfaite dans le serveur d'entreprise qui est bon
Artem Moskalev
Les livres présentés sont tous sur la conception OOP de MMORPG comme il ressort des commentaires. Pour cela, je préfère m'en tenir au GoF. Encore une fois, il semble que la programmation de jeux en ligne multijoueur côté serveur soit une sorte de connaissance sacrée transmise par la génération =) Tous les forums / publications / livres viennent à ces idées: "n'essayez pas de programmer MMO / Programmation MMO est vraiment difficile / MMO n'est pas pour un débutant "... et AUCUN CONSEIL du tout ...
Artem Moskalev
1
Regardez cet exemple: tutorials.jenkov.com/java-multithreaded-servers/…
MartinTeeVarga
Les livres présentés sont tous sur la conception OOP de MMORPG comme il ressort des commentaires. Pour cela, je préfère m'en tenir au GoF. Cette phrase n'a aucun sens. Construire un MMORPG équivaut également à construire un avion à réaction. Je dirais gagnez vos ailes avec des avions en papier.
MartinTeeVarga
Vous avez raison à 100% sur les avions en papier =) Mais ces livres ne sont même pas sur les avions en papier (par les avions en papier, je veux dire la programmation côté serveur mmo) - j'ai déjà appris cela des commentaires sur amazon =) Certains de ces livres traitent de modèles de conception pour les jeux MMORPG, qui peuvent être tirés d'autres livres de meilleure qualité, dans le même contexte de création de jeux. + Je construis déjà un B-2, donc j'apprécie tous les conseils que je peux obtenir. Merci =)
Artem Moskalev