【发布时间】:2012-12-03 12:45:24
【问题描述】:
我希望服务器在其中一个断开连接时向所有房间客户端发送消息。
类似这样的:
socket.on('disconnect', function() {
server.sockets.in(room).emit('bye');
});
但是……
- 我如何知道要广播哪个房间?
- 如果客户加入了多个房间怎么办?
【问题讨论】:
标签: javascript node.js socket.io
我希望服务器在其中一个断开连接时向所有房间客户端发送消息。
类似这样的:
socket.on('disconnect', function() {
server.sockets.in(room).emit('bye');
});
但是……
【问题讨论】:
标签: javascript node.js socket.io
在检查了套接字对象之后,我想出了这个解决方案:
socket.on('disconnect', function() {
var rooms = io.sockets.manager.roomClients[socket.id];
for (var room in rooms) {
if (room.length > 0) { // if not the global room ''
room = room.substr(1); // remove leading '/'
console.log('user exits: '+room);
server.sockets.in(room).emit('bye');
}
}
});
【讨论】:
这不是 100% - 但试一试:
在连接到房间或添加新用户时,请记住他们的用户名或 ID 或套接字中的其他内容:
socket.on('adduser', function(username){
socket.username = username;
socket.join('room');
}
然后收听房间上的离开事件:
socket.room.on('leave', function(){
socket.broadcast.to(this).emit(socket.username + ' says seeya!');
}
无论如何都值得一试 - 我敢肯定,如果不这样做,类似的东西会起作用。
【讨论】:
socket.room 未定义。
server.js 的函数 disconnect() 中完成,该函数与此处接受的答案具有相同的代码,这不是理想的方式(对于我),因为您必须手动找到用户要离开的房间。