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);
3 Réponses :
Socket hérite de chaque méthode de la classe d'émetteur qui déclare une méthode L'auditeur est désenregistré après son premier appel. une fois
a> pour un auditeur à coup unique. getRequest() {
this.sock.getData();
this.sock.socket.once('message', (data) => {
this.getresponseData = data;
});
this.sock.socket.on('disconnect',()=> {
console.log('A user disconnected');
});
}
Vous ne souhaitez pas vous abonner au message sur les deux méthodes.
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; });
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; });
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.