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 :

Architecture réseau, threadé ou non?


Sujet :

Threads & Processus C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de onilink_
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    611
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 611
    Par défaut Architecture réseau, threadé ou non?
    Bonjour, ou plutôt bonsoir,

    je code actuellement un jeu de plateforme, et j'aimerais bien implémenter la partie réseau avant que le moteur ne soit pas trop avancé (histoire de ne pas avoir trop de choses a revoir).

    Je suis novice en programmation réseau, et en threads (mais je maîtrise un minimum les sockets), c'est pour cela que je viens demander conseils avant de me lancer dans le cambouis.

    Histoire de commencer pas trop violemment, j'ai programmé un pong deux joueurs, a l'aide de threads pour récupérer les données de l'autre joueur. Le soucis, c'est que j'ai l'impression de m'être planté quelque part car si mon client et mon serveur utilisent chacun un thread, le jeu plante (alors que si j'ai un thread sur soit le client, soit le serveur ça marche, mais du coup seul un joueur peut bouger des deux cotés).

    Sachant que je vise un jeu en réseau 4 joueurs (mais si j'y arrive pas 2 joueurs ce serait déjà bien cool), temps réel, quel architecture me conseillerez vous? Suis-je obligé de passer par des threads? (j'ai pas réussi sans a vrai dire).

    Pour ce qui est de mon architecture actuelle (sur mon pong) c'est:
    Serveur:
    Un thread pour récupérer les informations de la batte du joueur 2
    Chaque step du jeu j'envoie les coordonnées de la balle et de la batte du joueur 1
    Le serveur gère les collisions, le score, etc...

    Client:
    Un thread pour récupérer les informations de la batte du j2 et de la balle.
    Chaque step du jeu il envoie les coordonnées de la batte.

    Du coup si je suit cette logique, pour mon jeu 4 joueurs je vais me retrouver avec 3 threads sur le serveur. J'ai vraiment pas l'impression que ce soit le mieux, sachant que j'ai du mal a les bien gérer et que je sais pas trop quand placer des mutex...

    Si quelqu'un a un peu de temps a me consacrer je le remercie d'avance, et sur ce bonne soirée a tous!

  2. #2
    Membre Expert
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    871
    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 : 871
    Par défaut
    En general j'aime bien threader les sockets lorsqu'il n'y en a pas beaucoup a gerer (des clients en gros). Par-contre j'utilise select des que le nombre de sockets a gerer devient plus important (donc des serveurs generalement). Dans ton cas il n'y a que 2 joueurs donc ca ne changera pas grand chose.

    Citation Envoyé par onilink_
    Histoire de commencer pas trop violemment, j'ai programmé un pong deux joueurs, a l'aide de threads pour récupérer les données de l'autre joueur. Le soucis, c'est que j'ai l'impression de m'être planté quelque part car si mon client et mon serveur utilisent chacun un thread, le jeu plante (alors que si j'ai un thread sur soit le client, soit le serveur ça marche, mais du coup seul un joueur peut bouger des deux cotés).
    Ca c'est pas un souci, c'est juste que tu l'as mal code. As-tu regarde les mutex pour eviter des acces concurrents sur tes donnees ?

    Pour ton architecture serveur je l'aurais vu comme ca :
    - une classe Client avec un id, une position, un score
    - une classe Balle avec une position

    Apres libre a toi de threader ou non, dans le cas present ca n'a pas une grande importance...

    A chaque fois que la balle bouge tu envoies la nouvelle position a tes clients. Par-contre je pense pas que threader l'envoi des donnees soit tres utile...

  3. #3
    Membre éclairé Avatar de onilink_
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    611
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 611
    Par défaut
    Bonjour,
    select c'est pour le multiplexage c'est bien ça? De cette façon il n'y aurais donc plus besoin d'utiliser de threads? Je pense que je vais me pencher sur ça, car cela a l'air quand même plus pratique :p
    Juste comme ça, ça changerais quelque chose niveau perfs (genre un peu, beaucoup)? Car logiquement sur un dualcore si j'ai un thread en plus ça devrait être plus rapide...

    Pour ce qui est des mutex j'en ai bien placé, c'est pour ça que je comprend pas trop ce qui fait freezer :p
    A moins que je les ai mal mis... (voila aussi pourquoi j'aimerais me passer de threads).

    Sinon oui je n'ai pas utilisé de thread pour envoyer les données donc ça va.

    Merci pour les réponses en tout cas :p

  4. #4
    Membre Expert
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    871
    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 : 871
    Par défaut
    Dans le cas present ca ne changera strictement rien au niveau des perfs. Pour voir ou ca coince, utilise un debugger (style gdb).

    Les threads sont relativements simples d'utilisation du moment qu'on sait ce que l'on fait si je puis dire.

Discussions similaires

  1. Imprimante réseau : à partager ou non ?
    Par vexal dans le forum Administration
    Réponses: 2
    Dernier message: 03/08/2006, 17h05
  2. Réponses: 3
    Dernier message: 07/03/2006, 20h36
  3. [Réseau][Thread]2 actions en même temps
    Par Belegkarnil dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 18/12/2005, 09h45
  4. [thread] Exception non catchée
    Par mammistegon dans le forum Concurrence et multi-thread
    Réponses: 3
    Dernier message: 22/11/2004, 21h43
  5. [Choix] Architecture réseau
    Par myfives dans le forum Développement
    Réponses: 7
    Dernier message: 09/06/2004, 13h23

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