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