2016-09-17 12 views
2

ich in meinem Express Server fürSocket.io socket.broadcast.to funktioniert nicht

userbase = {'Fitz': '84Iw3MNEIMaed0GoAAAD'}; //Exapmle user to receive message and associated socket id 



//Sending message to Example user 
    socket.on('send_msg',function(data_from_client){ 



     //Testing for receivers socketId 


    console.log(userbase[data_from_client.to_user]);//This returns the socket id for Fitz in userbase successfully i.e 84Iw3MNEIMaed0GoAAAD 



     socket.broadcast.to(userbase[data_from_client.to_user]).emit('get_msg',{msg:data_server.msg}); 
    }); 

Überraschung Überraschung, als ich Setup einen Handler für dieses Ereignis auf meiner cliens Seite haben 'get_msg' ich nichts.

.factory('SocketFctry',function(){ 
    var socket = io('http://localhost:3002') 

    return socket; 
}) 



.controller('ChatCtrl', function($scope,SocketFctry) { 

SocketFctry.on('get_msg',function(received_message){ 
    console.log(received_message); 
    $scope.$apply(); 

}) 


}); 

Meine anderen Client-Side-Handler funktionieren gut.

Meine Version von socket.io ist 1.3.7. Am fehlt mir hier etwas?

Antwort

0

Haben Benutzer bei der Verbindung einen Namespace?

socket.join(userbase[data_from_client.to_user]); //'84Iw3MNEIMaed0GoAAAD' 

können Sie versuchen:

socket.in(userbase[data_from_client.to_user]).emit('get_msg', {msg:data_server.msg}); 
+0

I unsderstand jeweils mit Client in den Raum mit seiner Buchse # id ... Ihre Lösung zu verwenden 'socket.in (socket.id) automatisch hinzugefügt' für mich gearbeitet, aber ich m stapste noch, dass 'socket.broadcast.to (socket.id)' nicht funktioniert. Ich würde wirklich gerne verstehen warum, bevor ich die Antwort akzeptiere. Irgendwelche Ideen? – yaboiduke

+0

Werfen Sie einen Blick auf diese http://stackoverflow.com/questions/6873607/socket-io-rooms-difference-between-broadcast-to-and-sockets-in-#answer-6877212 – gyc

2

socket.broadcast().to() eine Nachricht an alle Benutzer senden, die die to() Argumente außer dem Benutzer entsprechen, die socket es ist. So wird socket.broadcast.to(socket.id) nie an den tatsächlichen socket Benutzer senden. In der Tat wird es standardmäßig niemandem senden.

Direkt vom socket.io doc:

zu übertragen, fügen Sie einfach einen Broadcast-Flag zu emittieren und Verfahren Anrufe zu senden. Broadcasting bedeutet das Senden einer Nachricht an alle anderen außer für den Socket, der es startet.

Wenn Sie nur eine einzige Steckdose senden wollen, dann benutzen Sie einfach:

socket.emit(...) 

Wenn Sie möchten, zu einem socket.id-Typ Raum übertragen, und Sie wollen die Benutzer zählen, die Zimmer sind es ist, dann verwenden:

io.to('some room').emit('some event'): 

So können Sie dies ändern:

socket.broadcast.to(userbase[data_from_client.to_user]).emit('get_msg',{msg:data_server.msg}); 

dazu:

io.to(userbase[data_from_client.to_user]).emit('get_msg',{msg:data_server.msg}); 
+0

Sie gerettet den Tag bro ..! ! Danke vielmals..!! – Ritesh

Verwandte Themen