web-dev-qa-db-fra.com

Rappel réussi pour la méthode emit dans socket.io

Im essayant d'émettre un message personnalisé de mon client. J'ai besoin d'effectuer certaines actions sur son succès et son échec. Maintenant, comment puis-je attacher la méthode de rappel de réussite à émettre?

Pour le rappel d'erreur, j'ai utilisé événements exposés doc et l'ai fait fonctionner

socket.on('error', () -> console.log("Error Occured"))

Pour réussir, j'ai essayé

socket.emit('my custom method', {content: json},() -> console.log("Emitted"))

Ce rappel n'est jamais déclenché, que ce soit un succès ou un échec.

Comment puis-je me procurer le gestionnaire de réussite?

19
prasann

Si vous regardez les documents, cela vous montre un exemple de passage d'une fonction de rappel -2ème dernier exemple: http://socket.io/docs/#Sending-and-getting-data-acknowledgements

Ex serveur:

    socket.on('formData', 
              function(data, fn){
                      // data is your form data from the client side
                      // we are here so we got it successfully so call client callback
                      // incidentally(not needed in this case) send back data value true 
                      fn(true);
              }
             );

client:

      socket.emit('formData', 
                  data, 
                  function(confirmation){
                          // send data
                          // know we got it once the server calls this callback      
                          // note -in this ex we dont need to send back any data 
                          // - could just have called fn() at server side
                          console.log(confirmation);
                  }
                 );
61
user3363398

La raison pour laquelle votre deuxième code ne fait rien est que les événements exposés dans socketIO sont juste définis pour socket.on méthodes. Par conséquent, vous devez ajouter une autre émission dans votre serveur app.js pour accomplir cela

Client émet le message personnalisé et envoie des données JSON au socket via socket.emit, il obtient également une fonction de mise à jour qui gère le rappel de réussite

socket.emit ('message', {hello: 'world'});
socket.on ('messageSuccess', function (data) {
 //do stuff here
});

Côté serveur Obtient un appel du message émis par le client et émet le message Retour au client

socket.on ('message', function (data) {
 io.sockets.emit ('messageSuccess', data);
});

Vous pouvez probablement créer un module à partir de ce comportement afin de pouvoir le joindre à chaque message que vous souhaitez traiter de cette façon.

15
toxicate20