Socket.io socket.broadcast.to不工作

我在我的Express服务器

 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 ie 84Iw3MNEIMaed0GoAAAD socket.broadcast.to(userbase[data_from_client.to_user]).emit('get_msg',{msg:data_server.msg}); }); 

当我为我的客户端设置一个处理程序来处理'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。我在这里丢失了什么?

socket.broadcast().to()发送一条消息给符合to()参数的所有用户,除了它是socket的用户。 所以, socket.broadcast.to(socket.id)永远不会发送给实际的socket用户。 实际上,默认情况下,它不会发送给任何人。

直接从socket.io文档:

要进行广播,只需添加一个广播标志来发送和发送方法调用。 广播意味着将消息发送给除了启动它的套接字以外的其他人。

如果你想发送到一个单一的套接字,然后只使用:

 socket.emit(...) 

如果你想广播到一个socket.idtypes的房间,你想包括用户的房间,那么使用:

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

你有用户join连接命名空间吗?

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

你可以试试:

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