Socket.io socket.broadcast.to不工作

时间:2016-09-17 18:56:20

标签: angularjs node.js ionic-framework socket.io

我在我的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 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。我在这里遗漏了什么?

2 个答案:

答案 0 :(得分:3)

socket.broadcast().to()向所有符合to()参数的用户发送消息,但用户socket除外。socket.broadcast.to(socket.id)因此,socket永远不会发送给实际的socket.emit(...) 用户。事实上,默认情况下,它不会发送给任何人。

直接来自socket.io doc:

  

要进行广播,只需在emit和send方法中添加广播标志即可   调用。广播意味着向其他所有人发送消息   用于启动它的套接字。

如果您只想发送到一个套接字,那么只需使用:

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

如果你想广播到一个socket.id类型的房间,你想要包括它的房间用户,那么使用:

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

到此:

MouseClick

答案 1 :(得分: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});