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

Threads & Processus C++ Discussion :

Serveur mmo multithread meilleur usage


Sujet :

Threads & Processus C++

  1. #1
    Membre émérite
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Points : 2 724
    Points
    2 724
    Billets dans le blog
    1
    Par défaut Serveur mmo multithread meilleur usage
    Bonjour tout le monde,

    Je me lance dans la programmation d'un serveur mmo. Le but étant de créer un prototype capable de gérer une centaine de client à la fois.
    Je me heurte à un problème qui semble récurent où les réponses sont très divers et varié.

    J'ai un serveur qui va tout gérer de son coté (pas de calcul coté client etc....).

    _ Connection des clients.
    _ Réception des données du client.
    _ Envois de données vers le client.
    _ Affectation de la map et tout le tralala dont à besoin un jeu.

    J'ai trois approches possible:
    On multithread le tout (une thread par fonctionnalité donc 4 au total).

    On multithread rien du tout (tout est gérer via un select et le timer du select).

    On fait du moitier-moitier, la gestion des clients d'un coté, la gestion de la map et le tralala de l'autre.




    J'ai juste commencé la conception du serveur, donc je n'ai pas pu faire de test de charge sur une de ces trois parties.

    Je cherche donc un initié qui aurait déjà fait des tests de charge sur une des trois possibilités et me donne son avis.

    Je voulais aussi savoir les rapports "cout de dev"/"robustesse de la solution".

    Configuration:
    linux, C++, gestion des socket bas niveau (read/write/accept/select, pas d'api).
    Un pic de connection simultané espéré à une centaine de client.
    Un échange de tram de maxi 10ko.
    pc portable classique, mais suffisant pour ce genre de demande (oui je précise la machine car évidamment, pour plus de perf, on prend un nouveau serveur très performant, mais c'est pas le but final). Une machine simple devrait suffir à gérer une centaine de client simultané.

  2. #2
    Membre chevronné
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    855
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 855
    Points : 2 176
    Points
    2 176
    Par défaut
    Je vais te presenter les avantages et inconvenients de chaque methode, tu n'auras qu'a choisir apres celle qui te convient le mieux.

    Tout multithreade :

    - pas de consommation CPU si pas de client
    - plus grande reactivite sur machine avec plus de coeurs (et donc plus lent sur machine moins puissante logiquement)
    - chaque client se gere lui meme, ca facilite la gestion de chacun
    - comme chaque ressource doit etre copiee, ca risque d'etre un peu lourd au final en RAM

    Juste select :

    - si tu veux gerer un timer, c'est plus complique qu'avec les threads et tu auras une consommation CPU "minimum" permanente (pas tres important mais ca vaut le coup d'etre cite)
    - toutes les donnees sont centralisees autour d'une seule boucle donc t'as vraiment interet a bien t'y prendre
    - pas de threads en attente ou inutiles

    Melange des deux :

    - c'est a peu pres la meme chose que le tout threade
    - si une ressource doit etre utilisee par tous les threads en meme temps, ca pourra creer des lags si il y a beaucoup de demande

    Voila, je pense avoir fait une petite description qui t'aidera a t'orienter dans ton choix. Personnellement j'opterais pour un melange des deux mais ce n'est que mon avis.

  3. #3
    Membre émérite
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Points : 2 724
    Points
    2 724
    Billets dans le blog
    1
    Par défaut
    Je pensais aussi à utiliser un mélange des deux, ça me semble le plus approprié, le seul truc qui m'embète c'est de me rendre compte plus tard que cette solution n'est pas la plus adapté pour mon projet, c'est surtout pour ça que j'avais besoin de résultat de benchmark sur ces solutions pour savoir la moins couteuse en temps de dev rapport au nombre de clients gérable par solution

Discussions similaires

  1. serveur rmi multithreadés
    Par kmhf_developez dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 11/02/2013, 17h56
  2. Meilleur usage de Icomparer
    Par olibara dans le forum C#
    Réponses: 8
    Dernier message: 28/03/2011, 09h33
  3. serveur tcp multithread jeux
    Par midotek dans le forum Réseau
    Réponses: 1
    Dernier message: 01/12/2008, 22h43
  4. [VB.NET 2.0] Serveur en MultiThreading
    Par Aspic dans le forum Windows Forms
    Réponses: 1
    Dernier message: 15/03/2007, 12h46
  5. Aide pour serveur TCP multithread
    Par kingkong dans le forum Réseau
    Réponses: 3
    Dernier message: 27/04/2006, 12h37

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