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

Java Discussion :

Partage d'objet distant en temps réel


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 2
    Par défaut Partage d'objet distant en temps réel
    Bonjour,

    après de nombreuses recherches infructueuses (certainement parce que je n'ai pas trouvé le terme technique de ce problème) je viens solliciter votre aide :-)

    De façon théorique, je voulais savoir comment synchroniser des objets sur des ordinateurs distants (tous connectés à Internet (donc possibilité d'intégrer dans le réseau un serveur central qui centralise les objets)) et ce de façon "temps-réel" (juste un décalage du au ping en somme) tout en ayant des contraintes d'intégrités sur ces objets (exemple : 2 clients tentent de réaliser une modification au même moment, la modif du client 1 est réalisé, par contre la modif du client 2 est irréalisable à cause de la modif du client 1 qui s'est exécutée 1ms avant : il faut donc dire au client 2 que son action est irréalisable).

    J'avais pensé au début à ce que chaque modification d'un objet partagé passe par une demande de modification sur le serveur et que celui-ci la valide ou l'invalide et que le client soit en mis en attente pour savoir si il peut continuer ou non son action. Mais cela pose un problème de mise en attente du programme à chaque modification de l'objet... avec un ping de 200ms, 5 modifications successives prendraient rien qu'en temps de transite 1 seconde...

    J'ai donc ensuite pensé à une façon asynchrone de faire : les modifications sont réalisés en local chez le client et envoyés de façon asynchrone au serveur pour le mettre à jour et propagé aux autres clients la modification. Si la modification est invalidé par le serveur un ordre de rollback est envoyé au client. Tout le problème dans cette solution réside dans la mise en place de ce système de rollback...

    Existe-t-il d'autres façon de faire ceci ? Avez-vous des idées ou bien des pistes à me donner ?

    Merci d'avance :-)

  2. #2
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    ah Jini (Apache River) nous manque

  3. #3
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 2
    Par défaut
    Effectivement, Jini (Apache River) est une solution complète. Mais qui serait trop imposante pour mes besoins, je n'ai pas besoin de faire fonctionner toute mon application autour de ces objets synchronisés, juste certaines parties.

    Mon problème peut-être comparable avec ceux des jeux en réseau type FPS, voici un scénario représentant ma problématique :
    1. 3 joueurs sont présents;
    2. 2 joueurs font chacun 1 tir sur le même joueur en même temps;
    3. le tir de chacun des joueurs a suffisamment de puissance pour tuer le joueur ciblé;
    4. chaque joueur réalise de son côté les tests de collision, chacun détecte que son tir a touché le joueur ciblé et l'a tué;
    5. chacun envoi au serveur la commande indiquant que le joueur et mort par son tir;
    6. de façon a avoir un jeu fluide cet envoi est asynchrone et continue donc leur logique d'exécution;
    7. chacun gagne 100 points bonus qui les font chacun passer au niveau suivant et débloquer une nouvelle arme;
    8. les packets TCP indiquant la mort du joueur atteignent enfin le serveur;
    9. les packets TCP du joueur 1 ayant étaient plus rapides, c'est lui et lui seul qui a réellement tué le joueur;
    10. le serveur valide la mort de joueur et envoi à ce joueur l'information qu'il vient de mourir
    11. les packets TCP du joueur 2 arrivent, mais le serveur les invalides car le joueur est déjà mort, tué par le joueur 1 il y a 3 millisecondes...


    Problématique : comment faire faire au joueur 2 un rollback sur ces actions locales non-synchronisés (ici le déblocage de la nouvelle arme) parce que le "kill" ne lui a pas été attribué ?

    Si quelqu'un à une solution, une piste, une idée, un pré-sentiment, une intuition, qu'il n'hésite pas à s'exprimer

  4. #4
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Citation Envoyé par Oneil67 Voir le message
    Si quelqu'un à une solution, une piste, une idée, un pré-sentiment, une intuition, qu'il n'hésite pas à s'exprimer
    Mon intuition, c'est qu'un systeme de rollback est trop compliqué à mettre en oeuvre (en plus, ca parait bizarre d'afficher à un joueur "vous avez débloqué un niveau" puis, une seconde plus tard, "finalement, vous n'avez pas débloqué le niveau") et que la seule solution fiable pour s'assurer qu'il n'y a pas de probleme est d'envoyer la donnée au serveur et d'attendre sa réponse pour valider ou pas la mort du joueur...

    Quand aux problématiques sur le temps de réaction, elles supposent que 5 modifications de la meme donnée en meme temps (peu probable si peu d'utilisateurs). Et un temps de réaction d'une seconde n'a rien de choquant pour une appli web...

  5. #5
    Membre Expert
    Avatar de olivier.pitton
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2012
    Messages
    355
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 355
    Par défaut
    Pourquoi un rollback ? A mes yeux c'est le serveur qui décide de la mort du joueur. Lorsqu'il reçoit des tirs qui touchent, le serveur vérifie que le joueur touché est mort. Le dernier joueur à avoir tiré alors qu'il avait encore de la vie est le tueur, donc il a les points. Un message est envoyé au joueur 2 pour lui dire qu'il est mort et il s'arrête. Si ce-dernier effectue une action entre le moment où le tueur a tiré et celui où il est mort, c'est seulement du à la latence, comme dans n'importe quel jeu vidéo.

Discussions similaires

  1. [2008R2] Quelle solution pour répliquer 2 bases distantes en temps réel
    Par rdevel dans le forum Réplications
    Réponses: 0
    Dernier message: 27/05/2015, 09h45
  2. Rendu en temps réels d'objet volumétrique
    Par TocTocKiéLà? dans le forum Développement 2D, 3D et Jeux
    Réponses: 5
    Dernier message: 10/03/2008, 10h26
  3. Partage de donnée entre VI, sous-VI en temps réel
    Par Wazizgood dans le forum LabVIEW
    Réponses: 6
    Dernier message: 01/03/2008, 20h21
  4. Déplacer des objets en temps réel avec la souris.
    Par johnnyjohnny dans le forum MATLAB
    Réponses: 4
    Dernier message: 03/07/2007, 14h54
  5. insertion d'un objet 3D dans une video en temps réel
    Par chabfive dans le forum OpenGL
    Réponses: 5
    Dernier message: 02/11/2005, 13h10

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