Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 5 sur 5
  1. #1
    Membre éprouvé Avatar de Jerede
    Homme Profil pro Jérémy Deprez
    Développeur .NET
    Inscrit en
    mai 2010
    Messages
    270
    Détails du profil
    Informations personnelles :
    Nom : Homme Jérémy Deprez
    Âge : 23
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : mai 2010
    Messages : 270
    Points : 414
    Points
    414

    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 622
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34

    Informations forums :
    Inscription : décembre 2006
    Messages : 1 622
    Points : 1 951
    Points
    1 951

    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 éprouvé Avatar de Jerede
    Homme Profil pro Jérémy Deprez
    Développeur .NET
    Inscrit en
    mai 2010
    Messages
    270
    Détails du profil
    Informations personnelles :
    Nom : Homme Jérémy Deprez
    Âge : 23
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : mai 2010
    Messages : 270
    Points : 414
    Points
    414

    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 Confirmé Sénior
    Profil pro
    Développeur informatique
    Inscrit en
    novembre 2006
    Messages
    4 903
    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 : 4 903
    Points : 6 984
    Points
    6 984

    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
    Responsable Réseaux

    Avatar de ram-0000
    Homme Profil pro Raymond Mercier
    Consultant en sécurité
    Inscrit en
    mai 2007
    Messages
    11 249
    Détails du profil
    Informations personnelles :
    Nom : Homme Raymond Mercier
    Âge : 51
    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 249
    Points : 49 879
    Points
    49 879

    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •