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

Python Discussion :

Mise en relation de clients sur serveurs ?


Sujet :

Python

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2016
    Messages : 34
    Points : 115
    Points
    115
    Par défaut Mise en relation de clients sur serveurs ?
    Hello

    Je cherche à implémenter un serveur permettant de jouer aux echecs (projet purement didactique). Je vais pas vous C/C mon code car c'est plus un problème logique concernant les thread et sockets que de syntaxe.

    A chaque connexion d'un client sur le serveur, un thread est créé. Le joueur peut alors lister les personnes connectées au serveur. A chaque fois que deux personnes s'entendent pour jouer une partie une classe "Partie" est créée (c'est également un Thread et j'y envoie les deux connexions socket) et la partie commence.

    Mon problème réside dans l'entente d'une partie . Je veux qu'une personne puisse proposer un partie à une autre personne connectée et que celle-ci l'accepte ou non. Aussi simple que ça paraisse je bloque dessus. Chaque Thread communique avec son client mais pas entre eux. Y'a-t-il un moyen simple pour y arriver ? J'avais pensé à écrire chaque demande de partie dans un fichier texte commun, mais si 5 personnes lisent en boucle le même fichier je pense qu'il va y avoir un sérieux problème ...

    Des idées ?

    J'espère avoir été clair. Hésitez pas à demander des précision, car à cet instant le problème me semble limpide mais j'ai le pif dedans depuis un petit moment et j'ai peu être manqué de précisions. Merci !

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par Falquiero Voir le message
    Des idées ?
    En fait, 2 threads étant asynchrones, vous n'avez pas beaucoup de choix, il faut qu'un thread puisse poster un message et que l'autre "regarde" ce qu'elle a reçu pour déclencher une action et poster une réponse. Un mécanisme simple à utiliser pour transférer ces messages est une Queue et vous avez des exemples dans la documentation.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Ce genre de problème est très intéressant! J'avais travaillé un peu dessus il y a assez longtemps (2008), et les résultats de mes cogitations sont ici: http://python.jpvweb.com/mesrecettes...d_tableaublanc.

    Le code a beaucoup vieilli, mais le principe reste bon. L'exemple est construit sur la base d'un thread qui fabrique des expressions à calculer à la chaine, et des threads de calcul qui cherche en boucle des expressions à calculer, les calculent et donnent les résultats. La communication entre les threads se trouve dans un objet auxquels tous les threads ont accès.

    Cet objet qui porte les données communes que n'importe quel thread peut lire, modifier ou écrire est une pile appelée ici "tableau blanc", basée sur un type "list". Je n'ai pas utilisé une Queue parce que je voulais que les threads puissent lire n'importe quel objet de la pile sans détruire l'objet lu. Mais, bien sûr, il faut dans ce cas gérer un verrou pour empêcher que 2 threads n'accèdent en même temps à la même donnée.

    Le programme (=thread principal) peut examiner en permanence l'état du tableau blanc (objets en attente, en cours de traitement, terminés), supprimer les données obsolètes, voire gérer la création ou la suppression de threads de traitement.

    Le reste est dans le tuto!
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  4. #4
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2016
    Messages : 34
    Points : 115
    Points
    115
    Par défaut
    Merci de vos réponses. Je viens seulement de les voir.

    J'ai bidouillé un peu tout seul sur le problème et j'ai trouvé un solution (quoiqu'un peu [beaucoup !?] bancale). Elle consiste a tenir une liste à jour des propositions de jeu : liste = ['player1:player2', 'player3:player4']. Si on trouve dans la liste des élément en miroirs en rapports avec le pseudo du joueur on lance la partie. La partie est du coup lancé par un seul des joueurs (pour faire ça je compare les pseudo (chaîne de caractère, même si je sais pas trop ce que ça fait) des joueurs pour que ma fonction renvoie True à un joueur et False à l'autre).

    Mais cette solution ne me convient qu'à moitié. Je connaissais pas les Queues ni les tableaux blancs et m'en vais de ce pas consulter les tuto/docs. Merci pour votre temps !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [ZF 1.10] Mise en place zend_auth + zend_acl sur serveur zend_amf
    Par Madfrix dans le forum Zend_Acl & Zend_Auth
    Réponses: 8
    Dernier message: 21/10/2010, 23h48
  2. Réponses: 41
    Dernier message: 05/03/2010, 22h31
  3. Pb de mise en relation de webcams sur mon site
    Par poupeedecire dans le forum Intégration
    Réponses: 0
    Dernier message: 18/07/2008, 07h03
  4. mise en place de statistique sur client serveur
    Par king_neo2001 dans le forum Développement
    Réponses: 3
    Dernier message: 14/06/2007, 13h18
  5. base de donnees sur serveur application sur client
    Par rabi dans le forum Bases de données
    Réponses: 4
    Dernier message: 12/05/2004, 21h04

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