2016-07-21 9 views
6

Mam socket.emit połączenie od klienta do serwera w odpowiedzi chcę mieć nazwę pliku do klienta, która nie dzieje się z poniższym kodem nie wiem, co jest zaimplementowane niewłaściwie żadnego pomysłu, nie widzę żadnego błędu. Jak mogę uzyskać odpowiedź na serwer za pomocą socket.emit?Jak wysłać odpowiedź z powrotem do klienta za pomocą socket.io?

client.js

socket.emit('startRecording',function (response) { 
      console.log('start recording emit response',response); 
     }); 

server..js

socket.on('startRecording',function() { 
     var response; 
     logsRecording(function (filename) { 
      response = filename; 
      return response; 
      //socket.emit('filename',filename); 
     }); 
+0

'glitr -router' i 'glitr-router-client' pozwala na funkcje reakcji z serwera i podłączonego klienta tak, jak robisz to w expressjs. – X0r0N

Odpowiedz

7

Aby potwierdzić wiadomość, twój obsługi dla zdarzenia startRecording musi zaakceptować zwrotnego potwierdzenia jako parametr. Możesz wtedy połączyć się z żądanymi danymi. Zobacz Sending and getting data (acknowledgements)

socket.on('startRecording',function (socket, ackFn) { 
    var response; 
    logsRecording(function (filename) { 
     ackFn(filename); 
    }); 
}); 

Alternatywnie, można dodać detektor dla tego filename razie masz zakomentowanym, w client.js:

socket.emit('startRecording'); 
socket.on('filename', function(filename) { 
    console.log('Filename received: ' + filename); 
}); 

To może być pomocne, aby uruchomić poprzez Get Started: Chat application zaczynając od pozycji "Integracja Socket.IO" w celu lepszego zrozumienia Websockets.

+0

Dzięki temu zadziałało! – hussain

1

Kod serwer powinien wyglądać następująco:

socket.on('startRecording',function (callbackFn) { 
    var response; 
    logsRecording(function (filename) { 
     callbackFn(filename); 
    }); 

Jeśli chcesz przekazać w danych od klienta:

socket.emit('startRecording', {someData: 'value'}, function (response) { 

wtedy serwer będzie:

socket.on('startRecording',function (dataFromClient, callbackFn) {