套接字io。禁用自动加入由套接字ID标识的房间

时间:2016-05-28 22:30:25

标签: node.js websocket socket.io

在文档中说:" 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;
        }
    }
}

1 个答案:

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