Précédent   Forum des professionnels en informatique > Applications > Développement réseaux
Développement réseaux Forum d'entraide sur le développement réseaux, sockets, etc...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/01/2012, 23h00   #1
Invité de passage
 
Étudiant
Inscription : 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
Points : 3
Points : 3
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.
ixabro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 20h04   #2
Invité de passage
 
Quentin de Laroussilhe
Inscription : janvier 2012
Messages : 2
Détails du profil
Informations personnelles :
Nom : Quentin de Laroussilhe
Localisation : France

Informations forums :
Inscription : janvier 2012
Messages : 2
Points : 1
Points : 1
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...
Underflow est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 25/01/2012, 16h21   #3
Modérateur
 
Avatar de gangsoleil
 
R&D en systemes informatiques bas niveau Unix/Linux
Inscription : mai 2004
Messages : 5 485
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : R&D en systemes informatiques bas niveau Unix/Linux

Informations forums :
Inscription : mai 2004
Messages : 5 485
Points : 9 632
Points : 9 632
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.
__________________
Modérateur "C", "Informatique Générale & Hardware" et "Unix"
Les règles du forum
gangsoleil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2012, 23h02   #4
Invité de passage
 
Quentin de Laroussilhe
Inscription : janvier 2012
Messages : 2
Détails du profil
Informations personnelles :
Nom : Quentin de Laroussilhe
Localisation : France

Informations forums :
Inscription : janvier 2012
Messages : 2
Points : 1
Points : 1
Ah autant pour moi, je viens de découvrir le select. Niveau perfs par rapport au parallélisme ça donne quoi ?
Underflow est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2012, 11h07   #5
Modérateur
 
Avatar de gangsoleil
 
R&D en systemes informatiques bas niveau Unix/Linux
Inscription : mai 2004
Messages : 5 485
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : R&D en systemes informatiques bas niveau Unix/Linux

Informations forums :
Inscription : mai 2004
Messages : 5 485
Points : 9 632
Points : 9 632
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.
__________________
Modérateur "C", "Informatique Générale & Hardware" et "Unix"
Les règles du forum
gangsoleil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 22h18   #6
Invité de passage
 
Homme
Étudiant
Inscription : 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
Points : 1
Points : 1
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!!!
extony est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h52.


 
 
 
 
Partenaires

Hébergement Web