2012-11-25 14 views
16

Sto cercando di emettere un messaggio personalizzato dal mio client. Devo eseguire alcune azioni sul suo successo e fallimento. Ora, come posso allegare il callback di successo al metodo emit?Chiamata di successo per il metodo emit in socket.io

per la richiamata errore, ho usato Exposed events doc e ottenuto che funziona

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

per il successo, ho provato

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

Questa richiamata non è mai stato attivato a prescindere se il suo successo o il fallimento.

Come posso ottenere un gestore di successo?

risposta

15

Il motivo per cui il secondo codice non sta facendo nulla è perché gli eventi esposti in socketIO sono appena definiti per i metodi socket.on. Pertanto è necessario aggiungere un altro Emit nel server app.js per raggiungere questo

client emette il messaggio personalizzato e invia i dati JSON alla presa tramite socket.emit, anche egli ottiene una funzione di aggiornamento che gestisce il callback successo

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

lato server riceve una telefonata dal messaggio emettono dal client ed emette il messageSuccess al client

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

Probabilmente potresti creare un modulo da questo comportamento in modo da poterlo allegare a ogni messaggio che vuoi gestire in questo modo.

+3

Sono un po 'perplesso, in questo modo è meglio, l'evento 'emit' dal server o la funzione di callback inviata dal client. 'socket.emit ('message', {hello: 'world'}, function() {// fa stuff here});' C'è qualche differenza tra questi due metodi? – Giedrius

+0

La funzione di callback non funziona comunque? Perché la funzione di callback non funziona al 100%, posso ottenere che il callback funzioni al 50%. – dacopenhagen

+10

Questa non dovrebbe essere la risposta "giusta" poiché socket.io supporta "funzioni di riconoscimento" in cui è possibile passare la funzione chiamata "sull'altro lato". Si prega di vedere l'altro anser! – JakubKnejzlik

56

Se si guarda la documentazione, vi mostra un esempio di passaggio di una funzione chiamata indietro -2 ° ultimo esempio: http://socket.io/docs/#sending-and-getting-data-(acknowledgements)

Es server:

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); 
       } 
      ); 

cliente:

 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); 
        } 
       ); 
+1

Non funziona in senso inverso? Ho provato a inviare una funzione di callback dal server e invocarla sul client e non sembra che il callback lo faccia al client. – Chev

+4

sì, funziona in entrambi i modi. – user3363398

+4

+1 Nota anche che questo non funziona sulla trasmissione https://github.com/cayasso/primus-rooms/issues/28 – nha

Problemi correlati