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

Algorithmes et structures de données Discussion :

Association de joueurs / matchmaking


Sujet :

Algorithmes et structures de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 18
    Points : 22
    Points
    22
    Par défaut Association de joueurs / matchmaking
    Bonjour,

    Je cherche à faire un "match-making" simple pour une application Java permettant donc de mettre en relation 2 joueurs qui auront cliqué sur le "play" de leurs applications respectives.

    J'ai côté serveur du PHP et MySQL, et donc je passe par des requêtes HTTP simple contenant les paramètres (type ID du joueur).

    Donc côté serveur je reçois la requête de mise en attente, j'enregistre le joueur dans une table des mises en attentes, et si un autre se connecte, il pioche dans cette table le joueur adéquat.
    Mon soucis est que si 2 joueurs lancent dans un laps de temps assez court la recherche, ils vont se retrouver tous les 2 en attente. Et quoi je je fasse, s'ils sont dans le même timing, ils peuvent continuer à faire la même action au même moment, empêchant qu'ils se trouvent l'un l'autre, ou si un 3ème est dans la boucle, ça pose encore d'autres problèmes de synchronisation etc...

    Donc je recherche un algorithme "simple" permettant cette mise en relation sachant que je suis bloqué avec une architecture dont le serveur est un serveur web PHP sur MySQL, donc pas de possibilité d'avoir un vrai programme "serveur" qui gérerait ça comme un grand.

    Evidemment si je locke les tables impliquées, je résous le problème, je pense, mais l'idée de locker les tables ne semble pas idéale, en particulier en terme de performances à terme.

    J'ai pas mal cherché mais je ne trouve pas de solution sur le net, j'imagine que mon architecture est loin d'être idéale pour ce problème mais je développe un petit truc, je ne peux pas vraiment faire autrement.

    Je me trompe aussi peut-être dans les termes, match-making n'est peut-être pas ce qu'il faut chercher.

    Enfin, désolé si c'est la mauvaise catégorie, merci de me l'indiquer le cas échéant.

    Merci de votre aide.

  2. #2
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Bonjour

    Quand un joueur est en attente et qu'un autre arrive, que ce passe-t-il ? (sans parler de collision ou de synchronisation)
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 18
    Points : 22
    Points
    22
    Par défaut
    Actuellement (et c'est nul), le premier ne trouve rien donc il s'ajoute dans une table des joueurs en attente.
    Le second vérifie la table en question, trouve le premier, ajoute une entrée dans une table des parties en cours.
    Pendant ce temps le premier est censé continuer à checker régulièrement s'il trouve un autre joueur. S'il se trouve dans la table des parties en cours, alors il est notifié que ça commence et c'est réglé.

    Le soucis étant donc (dans ce cas de figure) que si un troisième arrive et fait la vérification entre le moment où le second a vérifié la table d'attente et le moment où il créé la partie, alors 3 va aussi créer une partie avec 1.

    J'ai réfléchi à plusieurs mécaniques mais j'en reviens toujours au problème lié au fait que côté serveur je ne peux faire les insertions que une par une, laissant la possibilité à un autre client de faire une insertion entre temps, ou dans le cas d'un SELECT dans une table me donnant un résultat donné, un client peut arriver et changer ce résultat pendant qu'un autre fait son traitement etc...

    Je me dis qu'une procédure stockée avec un lock sur les tables sensibles pourrait éventuellement aider, mais je n'aime pas trop l'idée de faire des locks dans tous les sens.

    D'autre part, je suis forcé de passer par une base de donnée qui est le seul moyen que j'ai de communiquer entre les différents processus.

    Je peux tenter un schéma si je suis pas clair

  4. #4
    Membre expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2013
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 563
    Points : 3 404
    Points
    3 404
    Par défaut
    Citation Envoyé par Kiristu Voir le message
    D'autre part, je suis forcé de passer par une base de donnée qui est le seul moyen que j'ai de communiquer entre les différents processus.
    Hum pourrais-tu expliquer pourquoi tu es forcé d'utiliser une base de données?
    Car la demande jouer du client peut facilement être traitée par le serveur qui, par exemple, ajouterait le joueur en question dans un tableau de joueurs en attente. A chaque ajout dans ce tableau, le serveur vérifie s'il peut associer des joueurs. Si des joueurs sont associés, ils sont retirés du tableau "matchmaking".. Non?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 18
    Points : 22
    Points
    22
    Par défaut
    Disons que le serveur web / PHP est tout ce que je peux avoir, je ne peux pas avoir un serveur dédié sur lequel je ferais tourner mon programme par exemple (et dans lequel il serait facile de gérer les accès simultanés).

    La base fait office de tableau de joueurs en attente. La question étant de gérer la concurrence des accès au tableau en question sans utiliser de locks explicites sur les tables.

    Je fais des tests sur une idée en cours, je posterai les résultats si c'est concluant.

    Je reste preneur de bonnes idées en attendant

Discussions similaires

  1. [SHELL] Icônes associées à des fichiers
    Par agh dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 09/04/2003, 17h04
  2. [VB6] [Install] Associer une icone à un raccourci
    Par petitgognol dans le forum Installation, Déploiement et Sécurité
    Réponses: 7
    Dernier message: 30/10/2002, 20h20
  3. [Delphi] Association composants-projet
    Par Pierre Castelain dans le forum Composants VCL
    Réponses: 6
    Dernier message: 31/07/2002, 16h20
  4. associer une base de données(access) a un dbgrid
    Par ange1708 dans le forum MFC
    Réponses: 3
    Dernier message: 11/06/2002, 12h18
  5. [Kylix] icone associée à un programme
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 22/03/2002, 09h43

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