2012-11-25 12 views
16

Próbuję wysłać niestandardową wiadomość od mojego klienta. Muszę wykonać pewne działania dotyczące sukcesu i porażki. Teraz, jak mogę dołączyć callback sukcesu do emitowania metody?Powołane wywołanie zwrotne dla metody emisji w socket.io

błędu zwrotnego, użyłem Exposed events doc i dostał pracę

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

na sukces, próbowałem

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

Ta funkcja zwrotna nigdy nie został wyzwolony niezależnie czy jej sukces lub niepowodzenie.

Jak mogę zdobyć obsługę sukcesu?

Odpowiedz

15

Powodem, dla którego twój drugi kod nic nie robi, jest fakt, że ujawnione zdarzenia w socketIO są zdefiniowane tylko dla metod socket.on. Dlatego trzeba dodać kolejny emitować na serwerze app.js do osiągnięcia tego

Client emituje komunikat niestandardowy i wysyła dane JSON do gniazda poprzez socket.emit, również dostaje funkcję aktualizacji, który obsługuje wywołania zwrotnego sukces

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

po stronie serwera dostaje telefon z komunikatem emituje od klienta i emituje messageSuccess powrotem do klienta

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

Prawdopodobnie możesz wykluczyć moduł z tego zachowania, aby móc dołączyć to do każdej wiadomości, którą chcesz obsłużyć w ten sposób.

+3

Jestem trochę zaskoczony, w którą stronę jest lepiej, wydarzenie 'emituj 'z serwera lub funkcja oddzwaniania od klienta. 'socket.emit ('message', {hello: 'world'}, function() {// rzeczy tu});' Czy jest jakaś różnica między tymi dwoma metodami? – Giedrius

+0

Czy funkcja wywołania zwrotnego nadal nie działa? Dlaczego wywołanie zwrotne nie działa w 100%, mogę uzyskać wywołanie zwrotne działające w 50%. – dacopenhagen

+10

To nie powinna być "właściwa" odpowiedź, ponieważ socket.io obsługuje "funkcje potwierdzeń", w których można przekazać funkcję wywołaną na "drugiej stronie". Zobacz inny anser! – JakubKnejzlik

56

Jeśli spojrzeć na docs, to pokazuje przykład przechodząc oddzwonić funkcja -2nd ostatni przykład: http://socket.io/docs/#sending-and-getting-data-(acknowledgements)

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

klient:

 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

Czy to nie działa wstecz? Próbowałem wysłać funkcję oddzwaniania z serwera i wywołać ją na kliencie, i nie wygląda na to, że wywołanie zwrotne powoduje nawet wysłanie go do klienta. – Chev

+4

tak, działa w obie strony. – user3363398

+4

+1 Należy również zauważyć, że to nie działa na nadawanie https://github.com/cayasso/primus-rooms/issues/28 – nha

Powiązane problemy