IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau et multijoueurs Discussion :

MMORPG Structure Client/Serveur ~10.000joueurs


Sujet :

Réseau et multijoueurs

  1. #1
    Membre averti Avatar de Jerede
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2010
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2010
    Messages : 271
    Points : 422
    Points
    422
    Par défaut MMORPG Structure Client/Serveur ~10.000joueurs
    J'ai trouvé pas mal d'articles concernant le multi-threading, notamment ceux çi

    http://www.developpez.net/forums/d20...artie-serveur/
    http://www.developpez.net/forums/d78...t-serveur-jeu/
    http://www.developpez.net/forums/d58...-multi-thread/

    Mon objectif est de réaliser un serveur ( en .NET ) qui pourrait tenir facilement les 10.000joueurs pour un jeux en tour par tour en 2D iso.
    Malheureusement je peine à comprendre la structure que doit adopter mon application car beaucoup d'avis divergent, et je ne m'y retrouve plus vraiment

    Pour l'instant j'ai réussi à en retirer ceci :

    *Utiliser des Sockets non bloquants

    *Préférable d'utiliser des pools de threads, afin d'éviter d'instancier des threads sans arrêt.

    *1 thread = 1Client c'est le mal

    *L'idéal est de grouper x clients dans un thread ( 100Clients par exemple )

    J'ai entendu parler de l'I/O Completion port, mais j'ai pas trop compris la mise en place.
    Je n'arrive pas à trouver une structure adapté pour réaliser le multi-threading ( je reste centré sur ma vision 1thread=1client )

    Quelque chose comme ceci conviendrai t'il ?

    Listener – Un Thread en attente de connection, accepte les connexions, et les envoit à un des I/O Workers

    I/O-Worker(s) – Un ou plusieurs threads qui recoivent / envoient les informations au client.(répartir ~100clients/thread)

    Data Processing Worker(s) – Un ou plusieurs threads qui recoivent les infos de IO Workers afin de les traiter et renvoyer de nouvelles infos.
    (Thread IA,Thread BDD,thread traitement...)

  2. #2
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Points : 2 161
    Points
    2 161
    Par défaut
    Citation Envoyé par Jerede Voir le message
    Mon objectif est de réaliser un serveur ( en .NET ) qui pourrait tenir facilement les 10.000joueurs pour un jeux en tour par tour en 2D iso.
    Même pour 10 000 joueurs en tour par tour, n'importe quelle solution fonctionnera probabelement sans soucis. Mais sans vouloir être désobligeant ... encore faut-il réussir à réunir 10 000 joueurs. Ce cas de figure est l'exception.

    Donc à mon avis (et comme souvent) on n'optimise pas à priori mais une fois qu'on a constaté les points 'chauds' et les limitations d'une première implémentation déjà développée et fonctionnelle.
    Je serais toi, je commencerais par faire une version simple et basique ; c'est seulement quand tu auras beaucoup de monde qu'il sera temps de voir là ou ça coince et d'adapter en conséquence.

    Bien sûr, pour éviter d'avoir à tou réécrire à chaque fois, il faut quand même penser faire un code -certes simple - mais propre.
    Mon projet du moment: BounceBox, un jeu multijoueurs sur Freebox, sur PC et depuis peu sur smartphone/tablette Android.

  3. #3
    Membre averti Avatar de Jerede
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2010
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2010
    Messages : 271
    Points : 422
    Points
    422
    Par défaut
    Disons 30.000joueurs alors
    Je développe surtout pour acquérir de nouvelles connaissances, et le multithreading / optimisation pour les process multicore m'est encore inconnu

  4. #4
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 360
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 360
    Points : 20 378
    Points
    20 378
    Par défaut
    Salut
    Citation Envoyé par Jerede Voir le message
    Listener – Un Thread en attente de connection, accepte les connexions, et les envoit à un des I/O Workers

    I/O-Worker(s) – Un ou plusieurs threads qui recoivent / envoient les informations au client.(répartir ~100clients/thread)

    Data Processing Worker(s) – Un ou plusieurs threads qui recoivent les infos de IO Workers afin de les traiter et renvoyer de nouvelles infos.
    (Thread IA,Thread BDD,thread traitement...)
    ehhh c'est pas la même chose ?
    Si tu fais un jeu en réseau au tour par tour eh bien tu seras obligé de bloquer le jeu en attendant que tout le monde ait joué..sinon ce n'est plus du tour par tour et ceci même si tu as ,supposons,10000 clients.
    Donc je ne vois pas trop l'intérêt de créer un thread par client il suffit juste un thread de connection qui attende les données.
    Pour gérer le tour par tour un simple tableau de booléen suffit

  5. #5
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par Jerede Voir le message
    J'ai entendu parler de l'I/O Completion port, mais j'ai pas trop compris la mise en place.
    L'IO completion port est pourtant la meilleure solution sous Windows. Cela permet de gérer avec quelques thread plusieurs milliers de socket sans trop d'overhead système.

    Je ne saurais te conseiller la lecture du livre Amazon.com: Network Programming for Microsoft Windows, Second Edition (Pro-Developer) (9780735615793): Anthony Jones, Jim Ohlund: Books@@AMEPARAM@@http://ecx.images-amazon.com/images/I/51S4G6M34RL.@@AMEPARAM@@51S4G6M34RL pour la partie socket.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Communication client/serveur mmorpg quelles données à envoyer?
    Par skeud dans le forum Réseau et multijoueurs
    Réponses: 9
    Dernier message: 21/10/2014, 15h25
  2. Structure Client-Serveur en Java
    Par Invité dans le forum API standards et tierces
    Réponses: 0
    Dernier message: 29/10/2012, 13h52
  3. MMO Client/Serveur structure de données
    Par sakipu dans le forum Réseau et multijoueurs
    Réponses: 9
    Dernier message: 21/09/2008, 09h42
  4. Structuration échange client serveur
    Par theyankee76 dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 11/05/2007, 21h42
  5. Réponses: 1
    Dernier message: 11/05/2006, 11h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo