1
votes

Comment déconnecter et connecter socket.io après l'événement de messagerie déclenché dans Angular

ici, je travaille sur un serveur socket et je le connecte au client angulaire, tout se passe bien, le problème auquel je suis confronté est que chaque fois que j'appelle getRequest , il devrait restituer les données obtenues à partir du message que je reçois

 postRequest() {
    this.sock.postData(this.postData);
    this.sock.socket.on('message', (data) => {
      this.responseData = data;
    });
    this.sock.socket.on('disconnect',()=> {
      console.log('A user disconnected');
   });
  }

ici après cela lorsque j'appelle une autre méthode comme postRequest () , le message émis par la demande de publication est déclenchant un événement de message dans get request ()

Voici ma demande de message

 getRequest() {
    this.sock.getData();
    this.sock.socket.on('message', (data) => {
      this.getresponseData = data;

    });
    this.sock.socket.on('disconnect',()=> {
      console.log('A user disconnected');
   });
  }

dans Bref chaque fois que j'appelle un postReuest, les données émises par mesasge vont également à l'événement de message dans la demande d'obtention qui ne devrait pas se produire.

Du côté du serveur Socket, les deux requêtes que j'utilise

socket.send (données);


0 commentaires

3 Réponses :



0
votes
  1. Vous ne souhaitez pas vous abonner au message sur les deux méthodes.

  2. si vous voulez obtenir une réponse selon les différentes méthodes, vous devez enregistrer différentes clés. tout comme "message". Et envoyez le message en fonction de la clé du serveur.

    this.sock.socket.on ('getmessage', (data) => { this.responseData = données; });

    this.sock.socket.on ('postmessage', (data) => { this.responseData = données; });

  3. Une autre approche serait d'avoir un identifiant dans la réponse de l'API.

    this.sock.socket.on ('message', (data) => { if (data.m.type == 'get') this.responseData = données; autre this.responsePostData = données; });

Référence Socket IO

  1. Une autre approche serait d'utiliser socket.ëmit

0 commentaires

0
votes

Ce que vous faites mal, c'est que vous appelez explicitement

this.sock.socket.on('message', (data) => {
      this.getresponseData = data;

    });

ci-dessus à chaque fois. Cela connecte un seul client plusieurs fois, ce qui n'est pas du tout souhaité .

Cette fonction doit être utilisée singleton pendant tout le cycle de vie de votre application sauf vous appellent socket.removeAllListeners ('disconnect'); explicitement.

À n'utiliser qu'une seule fois et si vous voulez obtenir un flux de données après avoir fait une requête http. Votre choix est faux. Vous pouvez utiliser la requête http classique ici.


0 commentaires