2012-11-25 13 views
16

Ich versuche, eine benutzerdefinierte Nachricht von meinem Client auszustoßen. Ich muss einige Maßnahmen ergreifen, um Erfolg und Misserfolg zu erzielen. Nun, wie kann ich den Erfolg Rückruf an die Methode emittieren?Erfolg Callback für emit-Methode in socket.io

Für Fehler-Callback, verwenden i Exposed events doc und bekam es

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

Für den Erfolg arbeitet, habe ich versucht,

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

Dieser Callback wird noch nie unabhängig ausgelöst, ob sie einen Erfolg oder Misserfolg.

Wie kann ich Erfolgshändler bekommen?

Antwort

15

Der Grund, warum Ihr zweiter Code nichts tut, ist, weil exponierte Ereignisse in socketIO nur für socket.on Methoden definiert sind. Daher müssen Sie eine andere emit in Ihrem Server hinzuzufügen app.js diese

Client zu erreichen die benutzerdefinierte Nachricht sendet und sendet JSON-Daten an die Buchse über socket.emit, auch bekommt er eine Update-Funktion, die den Erfolg Callback-Griffe

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

Server-Seite Ruft ein Anruf von der Nachricht von dem Client emittieren und emittiert den messageSuccess zurück an den Client

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

Sie könnten wahrscheinlich ein Modul aus diesem Verhalten machen, damit Sie das für jede Nachricht anhängen können, die auf diese Weise behandelt werden soll.

+3

Ich bin ein wenig verwirrt, welcher Weg ist besser, "emit" Ereignis vom Server oder Callback-Funktion vom Client gesendet. 'socket.emit ('message', {hallo: 'world'}, function() {// mach Sachen hier});' Gibt es einen Unterschied zwischen diesen beiden Methoden? – Giedrius

+0

Sollte die Callback-Funktion trotzdem nicht funktionieren? Warum funktioniert der Rückruf nicht zu 100%, kann der Rückruf 50% erreichen. – dacopenhagen

+10

Dies sollte nicht die "richtige" Antwort sein, da socket.io "Bestätigungsfunktionen" unterstützt, in denen Sie Funktionen übergeben können, die auf der "anderen Seite" aufgerufen wurden. Bitte sehen Sie den anderen Anser! – JakubKnejzlik

56

Wenn man sich die Dokumente sehen, es zeigt Ihnen ein Beispiel einen Anruf von vorbei zurück Funktion -2nd letztes Beispiel: 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); 
       } 
      ); 

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

Funktioniert das nicht umgekehrt? Ich habe versucht, eine Callback-Funktion vom Server zu senden und sie auf dem Client aufzurufen, und es scheint nicht so, als würde der Callback sogar den Client erreichen. – Chev

+4

ja, funktioniert in beide Richtungen. – user3363398

+4

+1 Beachten Sie auch, dass dies nicht funktioniert auf Broadcasting https://github.com/cayasso/primus-rooms/issues/28 – nha

Verwandte Themen