2016-09-17 66 views
2

我在Express服务器Socket.io socket.broadcast.to不工作

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

惊喜惊喜,当我安装一个处理程序上我cliens侧这一事件为'get_msg'我什么也得不到。

.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(); 

}) 


}); 

我的其他客户端处理程序工作正常。

SocketFctry.on('new_user', function(users,my_id){ 
    console.log(users); 
    $scope.online_users = users; 
    $scope.$apply(); 
    }) 

我的版本的socket.io是1.3.7。我在这里丢失了什么?

回答

0

你有没有用户加入连接的命名空间?

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

你可以试试:

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

我unsderstand每个连接的客户端会自动添加到房间与他的插座#ID ...您的解决方案使用'socket.in(socket.id)对我来说'工作,但我米仍然难倒'socket.broadcast.to(socket.id)'不起作用。我真的很想理解为什么在接受答案之前。任何想法? – yaboiduke

+0

看看这个http://stackoverflow.com/questions/6873607/socket-io-rooms-difference-between-broadcast-to-and-sockets-in#answer-6877212 – gyc

2

socket.broadcast().to()发送消息,以匹配to()参数除非谁的socket它是用户的所有用户。因此,socket.broadcast.to(socket.id)将永远不会发送给实际的socket用户。实际上,默认情况下,它不会发送给任何人。

从socket.io文档直接:

播放,只需添加广播标志发出和发送方法 调用。广播意味着向除了启动它的套接字的 以外的其他人发送消息。

如果您要发送到只有一个插座,然后只需使用:

socket.emit(...) 

如果你想广播到socket.id型房间,并要包含谁的房间用户它,然后使用:

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

所以,你可以改变这一点:

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

这样:

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

你保存了一天兄弟..! !非常感谢..!! – Ritesh