Précédent   Forum du club des développeurs et IT Pro > Applications > Développement 2D, 3D et Jeux > Réseau et multijoueurs
Réseau et multijoueurs Forum d'entraide pour le réseau et le multijoueur pour les jeux vidéo
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 04/09/2010, 02h08   #1
Jerede
Membre éprouvé
 
Avatar de Jerede
 
Homme Jérémy Deprez
Développeur .NET
Inscription : mai 2010
Messages : 270
Détails du profil
Informations personnelles :
Nom : Homme Jérémy Deprez
Âge : 21
Localisation : France

Informations professionnelles :
Activité : Développeur .NET

Informations forums :
Inscription : mai 2010
Messages : 270
Points : 439
Points : 439
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...)
Jerede est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/09/2010, 09h14   #2
nouknouk
Modérateur
 
Avatar de nouknouk
 
Homme
Inscription : décembre 2006
Messages : 1 612
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32

Informations forums :
Inscription : décembre 2006
Messages : 1 612
Points : 1 781
Points : 1 781
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.
nouknouk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/09/2010, 19h25   #3
Jerede
Membre éprouvé
 
Avatar de Jerede
 
Homme Jérémy Deprez
Développeur .NET
Inscription : mai 2010
Messages : 270
Détails du profil
Informations personnelles :
Nom : Homme Jérémy Deprez
Âge : 21
Localisation : France

Informations professionnelles :
Activité : Développeur .NET

Informations forums :
Inscription : mai 2010
Messages : 270
Points : 439
Points : 439
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
Jerede est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2010, 16h06   #4
Mat.M
Expert Confirmé Sénior
 
Développeur informatique
Inscription : novembre 2006
Messages : 4 445
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 445
Points : 5 864
Points : 5 864
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
Mat.M est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2010, 16h11   #5
ram-0000
Rédacteur/Modérateur

 
Avatar de ram-0000
 
Homme Raymond
Inscription : mai 2007
Messages : 9 036
Détails du profil
Informations personnelles :
Nom : Homme Raymond
Localisation : France

Informations forums :
Inscription : mai 2007
Messages : 9 036
Points : 27 757
Points : 27 757
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 http://www.amazon.com/Network-Programming-Microsoft-Windows-Pro-Developer/dp/0735615799 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
.
ram-0000 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 21h58.


 
 
 
 
Partenaires

Hébergement Web