在文档中说:" Socket.IO中的每个Socket都由一个随机的,不可思议的唯一标识符Socket#id标识。为方便起见,每个套接字自动加入由此ID标识的房间。"
我想知道是否有禁用此功能的选项。 我的解决方案是:
io.on('connection', function (socket) {
leaveDefRoom(socket);
[...]
}
function leaveDefRoom(socket){
var room = socket.adapter.rooms;
for (var key in room){
if (key.charAt(0) == '/') {
socket.leave(key);
return;
}
}
}
答案 0 :(得分:2)
在socket.io中。每次emit
事件。 socket.io将事件发送到此房间的客户端。如果您从房间中删除用户,则无法发送此用户消息。即使广播也行不通。
无论如何,如果你真的想要,你可以像其他房间一样离开这个房间:
您可以更改socket.js
文件并禁用此选项:
https://github.com/socketio/socket.io/blob/master/lib/socket.js#L289
Socket.prototype.onconnect = function(){
debug('socket connected - writing packet');
this.nsp.connected[this.id] = this;
// You have to remove this line below:
this.join(this.id);
this.packet({ type: parser.CONNECT });
};