Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1716 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C++ - Corba] Concept de réseau massivement multijoueur

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++ - Corba] Concept de réseau massivement multijoueur

n°938788
Worldofdad​a
Posté le 06-01-2005 à 09:31:52  profilanswer
 

Bonjour et bonne année !
 
Je suis en train d'essayer de faire, en C++ et Corba, un environnement 3D réseau (avec chat).
J'ai un petit problème de conception et j'aimerais bien connaitre vos avis .... vous avez peut etre déjà été confronté a ce problème.
 
Problème :
Lorsque qu'un client effectue une action, il envoi la modification au serveur et tous les autres clients doivent etre prévenus.
 
Solutions pensées :
1 - Chaque client possède également une partie serveur et ainsi le serveur principal leur envoi directement les modifications
Avantage : rapidité lors de l'execution
Inconvénient : plus dur a mettre en oeuvre
 
2 - Chaque client contacte le serveur a chaque cycle de son execution et le serveur principal lui envoi les modifications s'il y en a
Avantage : plus simple a mettre en oeuvre
Inconvénient : je ne sais pas si Corba est assez rapide pour pouvoir supporter la connexion de plus de 30 clients toutes les 5-10 ms et d'envoyer les infos s'il y en a
 
 
Il faudrait que le temps maximal pour chaque accès (avec calculs) soit de 50ms pour rester dans des temps corrects.
Je vais essayer de faire des tests de rapidité en passant 2Ko de chaine de caractère (mais je me souviens plus comment on gère les ticks).
 
Que pensez vous de mon problème et que me conseillez vous ?
Je pense que la 1ere solution serait la plus efficace mais étant donné que je commence a peine le projet et que l'on a environ 6 semaines pour faire tout ca ..... j'ai peur que ce soit dur dur.
 
 
Merci beaucoup
Et désolé si je n'ai pas posté au bon endroit
 
A bientot
Damien

mood
Publicité
Posté le 06-01-2005 à 09:31:52  profilanswer
 

n°938795
Lam's
Profil: bas.
Posté le 06-01-2005 à 09:39:21  profilanswer
 

Généralement, on utilise UDP plutôt que TCP pour les envois. En faisant du broadcast sur les réseaux locaux.
Mes 2 premières questions avant de te répondre seront donc:
 
1. Est-ce que CORBA est imposé ?
2. Est-ce pour du réseau local ou pas ?
 
Pour le reste de tes questions, je te répondrai un poil plus tard.

n°938906
nerisson
Pic-pic
Posté le 06-01-2005 à 11:15:35  profilanswer
 

Ta solution 1 ca s'appelle un call-back  :) Je pense que cette solution est simple à mettre en oeuvre mais va te generer un grand nombre de messages... Si a chaque fois qu'un client fait qq chose tu doit notifier les 29 autres en plus en passant par le serveur, tu imagines le nombre de messages à envoyer... D'un autre coté les messages seront assez court, puisque tu n'enveras que l'action d'un client et pas tout son etat.
La solution 2 est plus compliqué a mettre oeuvre puisque tu devras gérer un delta sur ton serveur entre chaque appel d'un client. L'avantage est qu'il y aura moins de messages à envoyer mais ils seront peut etre plus gros.
Personnelement je pense qu'il vaux mieux que ton serveur notifie regulierement tout les clients (via des methodes transient) en leur envoyant l'état de tout les clients à un instant donné.
 
Edit: je me demande si CORBA est vraiment bien adapté à ton probleme, il faudrait plutot un middleware qui puisse te faire du multicast


Message édité par nerisson le 06-01-2005 à 11:23:45
n°939279
Worldofdad​a
Posté le 06-01-2005 à 15:54:24  profilanswer
 

Merci pour vos réponses ...
 
CORBA ne m'était pas imposé et je dois pouvoir toujours en changer si il y en a un de vraiment mieux. Le problème est que le temps nous est compté et que j'aurais surement du mal a apprendre un nouveau concept si celui ci est compliqué
 
Au niveau du réseau, il faudrait quand meme que ca puisse marcher sur Internet meme si les tests seront fait en réseau local (Internet n'est donc pas indispensable mais très vivement conseillé).
 
Je pense a peut pres comme toi Nerisson c'est a dire que la méthode où le serveur principal contacte tous les clients régulièrement pour leur envoyer les MAJ est la meilleure solution. Le problème est toujours le meme : le temps ... car cette méthode me parait vraiment plus longue et plus compliquée a implémenter
 
Donc je continue mes réflexions ...
J'ai fais des tests sur un réseau local (qui n'est pas très performant) :
transfert de 40Ko + retour de 2 octets --> 16 - 30 millisecondes
transfert de 100Ko + retour de 2 octets --> 30 - 45 millisecondes
 
Ca me parait raisonnable (surtout que nous ne devrions pas utiliser plus de 2Ko par client et par cycle). Je testerai ce soir sur Internet avec 2 PC situés dans la meme ville (pour voir déjà sur une courte distance).
 
Merci beaucoup pour vos réponses.
Damien

n°939307
nerisson
Pic-pic
Posté le 06-01-2005 à 16:02:10  profilanswer
 

Euh 100 Ko par message ca me semble enorme. Il y aura quoi dans tes messages ?
 
Sinon le problème avec CORBA c'est que ton serveur va devoir envoyer le même message à tout tes clients. Si tu as peu de clients ca devrait aller, mais sinon il faudrait peut-etre penser à utiliser un autre outils

n°939423
Worldofdad​a
Posté le 06-01-2005 à 16:51:07  profilanswer
 

Ne t'inquietes pas, je testais les 100Ko juste pour regarder la rapidité mais j'estime que le serveur ne devrait pas devoir a envoyer plus de 10Ko par cycle avec une dizaine de clients.
 
L'idéal serait que l'on puisse y mettre une cinquantaine de personnes mais nous ne testerons jamais (ou juste une fois pour voir) avec plus de dix personnes.
 
A quels outils pensent tu pour éviter d'envoyer le meme message a tous les clients ?
 
Merci beaucoup
Damien

n°939500
mynab
Posté le 06-01-2005 à 17:43:06  profilanswer
 

Regarde les notifications et les events de corba.

n°939935
nerisson
Pic-pic
Posté le 07-01-2005 à 10:41:21  profilanswer
 

Worldofdada a écrit :

A quels outils pensent tu pour éviter d'envoyer le meme message a tous les clients ?


 
Ben il te faut un middleware capable d'envoyer les messages en UDP ou en IP multicast. Je ne crois pas que CORBA puisse faire ca. Quelle implementation utilises-tu ?
 
Sinon, si j'ai bien compris les messages contiendront des informations du genre position dans l'espace de chaque client et eventuellement un chat entre 2 clients ?

n°940646
Worldofdad​a
Posté le 07-01-2005 à 19:57:12  profilanswer
 

Exactement ... il y aurait en gros une structure stockée sur le serveur pour chaque client avec des informations comme la liste des nouvelles positions des autres clients s'ils ont bougés ainsi qu'une liste de messages.
Rien de bien gros en somme.
 
Qu'entends tu par "Quelle implémentation utilise tu ?"
Je fais un :
MonImpl MonImpl_ptr;
// Conversion en un objet servant de type Lien
Lien_var Lien_ior = MonImpl_ptr._this();
 
Mais ca m'étonnerais que ce soit ce que tu voulais savoir.
 
Merki

n°948959
Worldofdad​a
Posté le 08-01-2005 à 11:11:03  profilanswer
 

Salut !
 
J'ai cherché les Evenements en Corba et ca a l'air d'etre exactement ce qu'il me faut.
Si j'ai bien compris, le serveur peut envoyer un évènement a ses clients (j'ai pas réussi a voir s'il pouvait l'envoyer a un seul client) et ainsi, meme si je ne peux pas transmettre d'infos, les clients peuvent etre au courant qu'ils doivent venir chercher une mise à jour.
Est ce bien celà le concept des évènements (je préfère en etre bien sur plutot que de me lancer là dedans si j'ai mal compris mais d'apres plusieurs sources, ca a l'air d'etre ca) ?
 
Vous n'auriez pas un exemple de code utilisant les Events en C (ou C++) ?
Car j'ai trouvé un seul exemple dans un ppt mais il était plutot complexe pour une premiere approche.
 
Je continue a chercher ....
 
Merci beaucoup

mood
Publicité
Posté le 08-01-2005 à 11:11:03  profilanswer
 

n°949776
nerisson
Pic-pic
Posté le 10-01-2005 à 09:45:08  profilanswer
 

Je voulais savoir quel ORB tu utilises pour faire du CORBA, si c'est VisiBroker, Orbacus...

n°949794
Worldofdad​a
Posté le 10-01-2005 à 10:05:09  profilanswer
 

Ah oki, désolé de pas avoir compris la question (je suis un padawan du Corba).
 
J'utilises ORBacus

n°949889
Malkav
Posté le 10-01-2005 à 11:58:59  profilanswer
 

Je ne sais pas si çà peut t'aider mais tu peux peut etre jeter un coup d'oeil sur NeL, c'est une librairie open-source comprenant un moteur 3D performant, une gestion réseau a base de services communiquant en UDP (avec callbacks etc...)
 
C'est la librairie que développe Nevrax pour son jeu Ryzom, qui est un massivement multijoueurs ;) (cette lib est aussi utilisée par qq autres boites de jeux a travers le monde)
 
Il doit etre possible pour toi de ne garder qu'une architecture client-serveur assez simple en t'inspirant de la partie réseau de NeL
 
infos sur NeL:
www.nevrax.org
 
sur ryzom:
www.ryzom.fr
 
Bonne chance :)

n°950667
Worldofdad​a
Posté le 11-01-2005 à 12:46:27  profilanswer
 

Je viens de regarder la doc ORBacus et ils disent qu'il faut lancer le service events (apparemment un peu de la meme manière que le service d'annuaire).
 
Ils mettent :
eventserv  [-h,--help] [-v,--version] [-i,--ior] [-t,--typed-service] [-u,--untyped-service]
 
Le problème est que je n'ai pas ce fichier dans OOC\bin\ (contrairement a nameserv qui me sert pour l'annuaire).
 
Est ce normal où est ce que j'ai loupé un truc ?
(je vais peut etre créer un nouveau post car celui là s'écarte un peu du topic initial)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C++ - Corba] Concept de réseau massivement multijoueur

 

Sujets relatifs
Aide pour tester mon jeu en réseauRéseau de neurones
Corba et JBuilder[Access] Partage d'une base sur reseau avec tables liées
Réseau : quel formalisme pour les socket() ?Envoyer une trame sur le reseau !
connaitre son IP dans un reseau localConnexion à un disque reseau
Logiciel pour constuire un réseau de neuronesReseau Socket - Problème de bind() dans un client/serveur local
Plus de sujets relatifs à : [C++ - Corba] Concept de réseau massivement multijoueur


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR