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

Développement Discussion :

[Jeu] - Programmation réseau <sérialisation,sockets,threads>


Sujet :

Développement

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 23
    Par défaut [Jeu] - Programmation réseau <sérialisation,sockets,threads>
    Bonjour,

    pour vous mettre dans le contexte, mon groupe et moi même devons réaliser un jeu vidéo en langage C# dans le cadre d'un projet scolaire. Nous avons décidé d'utiliser XNA.
    Les moteurs graphique et physique du jeu sont déjà bien entamés.

    Nous voudrions que les joueurs puissent y jouer en réseau. Nous sommes conscients que cela implique un minimum de connaissances dans la programmation réseau.
    Pour vous donnez un apercu de ce que nous voulons programmer, disons que nous aimerions réaliser une interface serveur-client où les joueurs pourraient choisir de se connecter à tels ou tels serveurs, chaque serveur réprésentant une map et ayant une capacité de 10 joueurs maximum.
    D'après mes recherches sur internet, il faudrait un socket connexion par serveur vu le nombre réduit de joueurs par serveur et un socket écoute unique. Apparement dans le cas d'un MMO il faudrait utiliser un socket par client. A cela s'ajoute les threads dont je pense avoir trouvé assez de documentation la dessus.

    De plus, nous avons récément fait la découverte du procédé de sérialisation. Nous comptons utiliser la sérialisation binaire pour faire transiter nos objets (players, etc...) à travers le réseau.
    Le soucis c'est que nous sommes totalement débutant dans le domaine du réseau, j'aurais aimé avoir plus de documentation concernant la pratique de la sérialisation binaire + réseau.

    Même après avoir lu plusieurs docs, je butte encore au niveau des sockets avec les threads. Je ne sais absolument pas quelle structure de programmation, nous allons suivre pour mener à bien notre interface. Le nombre de sockets qu'il faut utiliser pour celle-ci dans le cas des serveurs et des clients, reste abstrait pour moi.

    Enfin, je suis tombé sur des tutoriels threads, sockets et autres mais je n'ai pas trouvé d'articles alliant l'utilisation des sockets&threads dans le cadre d'un jeu.
    Où alors je cherche mal. Quoiqu'il en soit si vous pouviez me mettre sur la voix ça serait vraiment une bonne chose pour nous.

    Merci à ceux qui lisent ce message.

  2. #2
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2
    Par défaut
    Dans le cadre d'un serveur, il faut obligatoirement mettre à disposition autant de sockets que de client connectés, ainsi qu'un socket listener pour permettre au serveur de recevoir les connexions. Le listener va écouter le port, et rediriger les connexions vers un autre socket qui prendra le relais, afin de laisser le listener libre.

    Le multithreading est quand à lui nécessaire du fait que les fonctions des sockets (listen, send, ...) sont bloquantes. Si ton programme est mono-thread, lorsque le listenner attend une connexion, rien d'autre ne pourrait s'executer. Ainsi, on dispatche chaque socket sur un thread séparé, ce qui implique nb_connectés + 1 thread.
    Le truc cool en l'occurence c'est que .net prémache le truc, et fournit des sockets dits asynchrones, càd où les fonctions ne sont pas bloquantes et s'executent sur un autre thread. Tu n'as pas à te soucier de ce problème.

    Pour ce qui est de la serialisation binaire, c'est un moyen pour envoyer les trames réseau mais qui est pas forcement très optimisé (tel que tu l'annonce, tu risque déjà d'envoyer plus d'infos que nécessaire).


    Pour la partie client, un socket suffit dans le cas où tu n'as qu'une seule connexion à établir (le chat est souvent décentralisé sur les serveurs de MMO', pour eviter de bouffer les perfs du serveur de jeu).



    Le net c'est p'tit en fait...

  3. #3
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Citation Envoyé par Underflow Voir le message
    Le multithreading est quand à lui nécessaire du fait que les fonctions des sockets (listen, send, ...) sont bloquantes. Si ton programme est uni-thread, lorsque le listenner attend une connexion, rien d'autre ne pourrait s'executer. Ainsi, on dispatche chaque socket sur un thread séparé, ce qui implique nb_connectés + 1 thread.
    Non.

    Oui c'est bloquant, mais non tu n'es pas oblige de passer ton temps a attendre sur chacune, et non, tu n'es pas oblige d'avoir un thread par socket plus un thread pour la master-socket (celle qui ecoute s'il y a de nouvelles connexions). Il est tout a fait possible de faire un serveur mono-thread qui gere plusieurs clients, et ca se fait meme beaucoup.
    Et si tu as de tres nombreux clients et que tu multi-thread, tu auras de bien meilleures performances en ayant un pool de sockets dont le nombre est proportionnel a ton nombre de coeurs/processeurs qu'en ayant autant de sockets que de clients.


    Il te suffit d'utiliser select() (c'est une fonction C, mais je suis certain qu'il existe un equivalent dans d'autres langages), qui te retourne la liste des sockets sur lesquelles quelque chose est arrive depuis la derniere fois. Si c'est la socket principale, c'est qu'un nouveau client est arrive, et si c'est une autre ,c'est que tu as des donnees a lire dessus, ou bien que la connexion a ete coupee.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  4. #4
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2
    Par défaut
    Ah autant pour moi, je viens de découvrir le select. Niveau perfs par rapport au parallélisme ça donne quoi ?

  5. #5
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Citation Envoyé par Underflow Voir le message
    Niveau perfs par rapport au parallélisme ça donne quoi ?
    Ca depend du nombre de sockets a gerer, et de la quantite de donnees transferees : pour quelques sockets qui ne transferent que de temps en temps, et un programme qui ne fait pas du calcul intensif, tu ne verras pas la difference.
    Et a l'inverse, si tu as un tres grand nombre de connexions, un pool de threads qui s'occupent chacun de plusieurs sockets via le meme principe sera beaucoup plus performant que d'avoir un thread par socket.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  6. #6
    Invité de passage
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 1
    Par défaut
    Bonjour,
    qui peut m'aider a trouver une application de gestion pour un réseau adsl svp?
    comme gestion de priorité par exemple ou n'importe.

    Merci!!!

Discussions similaires

  1. Réponses: 11
    Dernier message: 17/05/2012, 10h38
  2. programmer en réseau sans les sockets
    Par darkbob dans le forum Développement
    Réponses: 4
    Dernier message: 21/06/2007, 15h23
  3. Programmation réseau : socket et thread
    Par roms712 dans le forum POSIX
    Réponses: 12
    Dernier message: 12/01/2007, 17h27
  4. Chat (sockets + thread)
    Par raf_gug dans le forum MFC
    Réponses: 4
    Dernier message: 14/01/2004, 17h00

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