Comment un MMO gérerait-il le calcul et l'envoi de paquets pour des milliers de joueurs à chaque tick pour un jeu d'action en direct?


Je travaille sur un jeu et je pense à entrer dans le réseautage. Je programmais depuis environ 5 ans et je me suis lancé dans le développement de jeux ces 2 dernières années. Je n'apprends vraiment qu'en ligne et à partir de livres sur mon propre temps. Je prévois de créer un serveur java pour Amazon AWS EC2, mais je me demande simplement comment les MMO gèrent plusieurs joueurs à chaque tick.

Est-ce juste la puissance des serveurs? Je ne cherche pas de code ou quoi que ce soit, juste en général comment fonctionnent les serveurs.

Fait le serveur fait juste tous les calculs pour tous les joueurs et les dizaines ou centaines de milliers d'objets puis envoie et reçoit des milliers de paquets chaque tick? Il semble juste comme beaucoup pour un seul ordinateur à gérer, mais c'est en effet un serveur.

Author: Tirz, 2015-03-29

2 answers

Comment fonctionne et quel est le travail d'un serveur?

  • Votre serveur crée un socket et ouvre un port.

  • Le protocole pour un jeu en ligne est généralement en UDP car il est plus rapide.

  • Votre serveur doit gérer TOUTES les connexions des clients.

  • Vous pouvez ajouter un serveur capable de connecter un compte et de le rediriger vers un serveur de jeu (c'est le cas pour tous les big MMO).

  • Votre serveur doit gérer tous les calculs de la base de données: lorsqu'un ennemi frappe un autre ennemi, soustrayez une partie de votre argent lorsque vous achetez des objets...

  • Le serveur est donc la partie principale d'un jeu en ligne.

En fait, un ordinateur est vraiment rapide pour faire des calculs, la partie la plus lourde pour un jeu vidéo moderne est la physique et les graphiques... Heureusement, ces deux parties sont sur la partie client.

Mais, un serveur doit être fort! Pas comme un client parce qu'il n'a pas besoin un gros GPU, mais il a besoin d'une grande quantité de RAM/CPU (dépend du jeu) et il a également besoin de rester froid.

En fait, un serveur de jeu est capable de gérer un grand nombre de connexions à cause du protocole UDP et parce que toutes les parties lourdesdu programme sont sur le côté client. Vous pouvez jeter un oeil ici: Créer un jeu multijoueur en python{[44] } et lire la partie quand j'explique la différence entre l'UDP et le TCP protocole.

All the others informations about how work an MMO server are linked at the end of this topic.

Maintenant, nous pouvons essayer de construire un serveur!

Tout d'Abord, savez-vous comment créer un serveur?

  • Programmez ou téléchargez un serveur pour faire un test (exemple: TeamSpeak ou Mumble).

  • Lancez-le depuis votre ordinateur et autorisez ses connexions d'entrée depuis votre pare-feu.

  • Connectez-vous sur votre modem et redirigez/redirigez le port de votre serveur vers votre ordinateur.

Pour la dernière partie, vous avez besoin faire de la recherche: quel port est utilisé par mon serveur et comment envoyer un port avec mon modem (chaque modem est différent).

Vous pouvez maintenant essayer de vous connecter à votre serveur. Mais...!

Votre ordinateur a trois adresses IP:

  • L'adresse de Bouclage: localhost, 127.0.0.0 (Le "0" peut changer)

  • L'adresse Intranet (IP liée à votre ordinateur): 192.168.0.0, 172.16.0.0, 10.0.0.0

  • Et l'adresse Internet (IP liée à votre modem): 0.0.0.0

Comment connaître votre IP Intranet / Internet? Cela dépend de votre système d'exploitation et de votre modem. Pour l'Intranet, utilisez votre terminal et écrivez " ifconfig "ou"ipconfig". Pour votre adresse Internet, il est parfois écrire lorsque vous vous connectez à votre modem, ou vous devez visiter un site Web qui est en mesure de vous montrer votre adresse IP.

Si vous créez un serveur et que vous n'avez pas transféré le port de votre modem, vous pouvez toujours accéder à votre serveur en local avec votre bouclage adresse et les autres ordinateurs connectés au même modem peut également accéder au serveur Intranet à l'adresse. De plus, si vous devez tester si votre serveur est accessible depuis Internet, vous devez tester la connexion avec votre IP Internet, mais certains modem n'autorisent pas les connexions externes depuis l'Intranet... Donc, si votre connexion avec l'IP Internet ne fonctionne pas, essayez de vous connecter à votre serveur à partir d'un autre modem (PC d'un ami, Cyber-Café...).

Enfin, comment protéger votre le serveur?

C'est vraiment difficile et vous ne pouvez pas créer une sécurité parfaite... Surtout si vous suivez mes conseils mais que vous n'avez pas complété mes connaissances avec vos propres recherches.

  • Accès root

C'est la partie la plus importante. Lorsqu'un lamer essaie d'accéder à votre serveur, il peut simplement essayer une connexion simple comme le http/ssh/ftp. S'il peut accéder à votre disque dur et que vous n'avez pas choisi de restriction forte, il peut simplement lire / modifier / supprimer la base de données de votre jeu. La base de données contient toutes les informations sur les comptes.

  • Pare-feu

Nous avons déjà parlé de la quantité de connexions/calcul qu'un serveur doit gérer. Dans certaines attaques, le lamer essaie de créer une grande quantité de connexions et ne les ferme pas. Nous appelons cela un DOS (avec 1 ordinateur) ou DDOS (plus de 1 ordinateur). Vous avez donc besoin d'un bon pare-feu pour: autoriser uniquement le port de votre serveur, autoriser uniquement X nombres de connexions à partir d'une adresse IP unique et n'autorisez que X nombres de nouvelles connexions toutes les minutes.

  • Mises à jour

C'est la partie la plus simple: gardez votre système d'exploitation (et les autres applications) à jour.

  • Moins, c'est mieux

N'installez pas beaucoup de logiciels inutiles sur votre serveur. Si un logiciel n'est pas importé pour votre serveur, vous ne devriez pas l'installer car: premièrement, cela peut être un virus. Deuxièmement, un logiciel malveillant peut exploiter ce logiciel pour installer un virus ou voler la racine accès.

  • Chiffrement

Le cryptage est vraiment important pour bloquer un pirate. Par exemple, avec le protocole https, vous pouvez protéger les mots de passe de l'utilisateur contre l'attaque MITM. Et avec le Bluefish / SHA / others, vous pouvez crypter votre base de données pour la protéger même si un pirate peut la lire. Le plus important est toujours de bloquer le droit d'écriture / modification / suppression / exécution du pirate (en fait, tous les clients de votre jeu ont besoin de la lecture accès).

  • Anti-virus?

Dans le cas d'un jeu en ligne, un antivirus n'est pas vraiment important (Mais toujours recommandé pour tous les systèmes d'exploitation, Linux/Unix également).

  • Avoir un bon serveur

Si votre serveur est programmé sans prendre soin de la sécurité, vous pouvez être en difficulté. Exemple: Attaque de débordement de tampon dans C / C++.

If you need more informations about how work an MMO, I recommend you:

Astuce-Si vous êtes intéressant en créant un jeu en ligne, vous devez faire de nombreuses recherches, je ne peux pas vraiment répondre cette question, parce que n'est pas le but du sujet. Et ce sujet est trop grand pour écrire une nouvelle réponse à chaque question... Quel logiciel utiliser pour programmer un jeu? Comment construire un socket? Où a commencé? Mais j'ai déjà répondu à quelques questions similaires. Même si le langage de programmation est parfois différent, je vous donne le lien, la logique est toujours la même donc cela peut peut-être vous aider:

 3
Author: Tirz, 2015-06-14 08:54:19

La plupart des MMO ont une bonne quantité de logique client de sorte que le serveur n'a pas besoin d'envoyer des multitudes de paquets à chaque joueur tout le temps. Le serveur ne fait pas de calculs pour tous les joueurs, le client fait le gros du travail et le serveur traite des clients et de l'état du monde virtuel dans une base de données.

Par exemple, votre client et votre serveur pourraient avoir le même modèle mondial. De cette façon votre joueur peut naviguer dans le monde et le code client dire au serveur sur un assez intervalle de cours (disons 100 de msecs).

Généralement, vous souhaitez que vos clients se mettent à jour sur le serveur et que la réponse du serveur traite de la synchronisation des clients.

Les MMO exécutent également plusieurs serveurs dans leurs fermes, de plusieurs dizaines à des centaines. Ces serveurs parlent généralement à une grande base de données haute performance-fondamentalement, l'état du monde virtuel est dans la base de données, et les serveurs sont assis entre garder la base de données à jour et communiquer avec le client des apps.

 1
Author: Ron Kuper, 2015-05-17 21:34:56