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

Langage Java Discussion :

Une méthode écoute une autre ?


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2007
    Messages : 165
    Par défaut Une méthode écoute une autre ?
    Bonjour,

    J'ai un petit serveur et j'aimerais bien vérifier que les packets que j'envoie sont reçus... Donc à chaque "commande" serveur, le client renvoie un acknoledge.
    J'ai pour chaque commande 2 méthodes sur le serveur :
    1) envoieCommande
    2) recuAcknoledgeCommande

    Puis-je faire que ma méthode 1 regarde la 2 et agit dès que celle-ci reçoit le packet ? Pour l'instant la 2 se limite à écrire dans la console du serveur "clientX à reçu commandeY". Il se peut que j'envoie la même commande à 20 client et puisque les réponses ne seront pas dans l'ordre je ne peux pas simplement appeler la méthode 2 dans la 1.
    Que dois-je faire ?


    PS : Le serveur est en MVC-2.

    Cordialement,

    rXp>!<

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 802
    Par défaut
    Ca va dépendre du temps qui peut s'écouler entre l'envoi de la commande et la notification de réception.

    Si le temps est court, c'est-à-dire de quelques minutes au maximum, j'aurais tendance à t'orienter vers un CountDownLatch ou un CyclicBarrier qui va te permettre de synchroniser les deux méthodes.

    Si le temps est de l'ordre de plusieurs heures voire davantage, le mieux est de passer par une base de données et un thread qui parcoure régulièrement cette base de données pour connaître l'état des processus.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2007
    Messages : 165
    Par défaut
    Citation Envoyé par verbose Voir le message
    Ca va dépendre du temps qui peut s'écouler entre l'envoi de la commande et la notification de réception.

    Si le temps est court, c'est-à-dire de quelques minutes au maximum, j'aurais tendance à t'orienter vers un CountDownLatch ou un CyclicBarrier qui va te permettre de synchroniser les deux méthodes.

    Si le temps est de l'ordre de plusieurs heures voire davantage, le mieux est de passer par une base de données et un thread qui parcoure régulièrement cette base de données pour connaître l'état des processus.
    Ca va être un transfert d'information direct et à quelque secondes près au maximum.

    Mon serveur crée un Thread pour chaque "user connected" alors avec un countdownlatch (si j'ai bien compris la doc) je vais devoir créer un thread temporaire pour attendre la réponse de la commande ?

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 802
    Par défaut
    Tu devrais faire un truc dans le genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    public void recuAcknoledgeCommande() {
    	final CountDownLatch latch = new CountDownLatch(1);
    	new Thread() {
    		@Override
    		public void run() {
    			latch.await();
    			receptionCommande() 
    		}
    	}.start();
     
    	//réception ack
     
    	latch.countDown();
    }

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2007
    Messages : 165
    Par défaut
    Citation Envoyé par verbose Voir le message
    Tu devrais faire un truc dans le genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    public void recuAcknoledgeCommande() {
    	final CountDownLatch latch = new CountDownLatch(1);
    	new Thread() {
    		@Override
    		public void run() {
    			latch.await();
    			receptionCommande() 
    		}
    	}.start();
     
    	//réception ack
     
    	latch.countDown();
    }
    Donc receptionCommande va recevoir le acknoledge et dire "timeout" si après temps de secondes et d'essaie il n'a rien reçu ? Mais avec ce schéma là je ne comprend pas comment la première méthode sera prévenue.

    Je pensais faire cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    public void envoieCommande() {
     
            //on prepare et envoie la commande
     
    	final CountDownLatch latch = new CountDownLatch(1);
    	new Thread() {
    		@Override
    		public void run() {
    			latch.await();
    			receptionCommande() 
    		}
    	}.start();
    	latch.countDown();
     
    }
    Qu'en penses-tu ?

    Cordialement,

    rXp>!<

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 802
    Par défaut
    Je ferais le traitement de la commande après le lancement du thread. Mais ça ne change rien au fond. C'est juste que tel quel, je ne vois pas l'intérêt d'utiliser un CountDownLatch vu que l'appel de countDown() se fait aussitôt après le lancement du thread.

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

Discussions similaires

  1. Accès à une méthode d'une form depuis une autre autre form
    Par arngrimur dans le forum Windows Forms
    Réponses: 16
    Dernier message: 13/01/2012, 15h45
  2. modifier un élément d'une form dans une méthode d'une autre form
    Par baldebaran dans le forum Windows Forms
    Réponses: 9
    Dernier message: 14/08/2009, 13h59
  3. Réponses: 3
    Dernier message: 29/04/2008, 14h14
  4. Réponses: 2
    Dernier message: 31/08/2005, 16h12

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