Node.js 如何更改套接字的id?

Node.js 如何更改套接字的id?,node.js,socket.io,Node.js,Socket.io,我在node.js中制作了一个应用程序,我注意到每次用户打开新页面或更改页面时,他们都会获得不同的套接字id。是否可以更改该套接字的id,以便用户始终具有相同的套接字id? 当用户连接到服务器时,它将uid和套接字id保存在mongodb中,并在每次连接时获取该数据 这是我的代码: nspm.on('connection', function(socket) { db.c_oneusr(socket.decoded_token, function(err, docs){

我在node.js中制作了一个应用程序,我注意到每次用户打开新页面或更改页面时,他们都会获得不同的套接字id。是否可以更改该套接字的id,以便用户始终具有相同的套接字id? 当用户连接到服务器时,它将uid和套接字id保存在mongodb中,并在每次连接时获取该数据

这是我的代码:

nspm.on('connection', function(socket) {
        db.c_oneusr(socket.decoded_token, function(err, docs){
            if(docs) {
                if(docs.ban=='1') {
                    nspm.to(socket.id).emit('ckusr', 'banned');
                    socket.disconnect();
                    return;
                }
                else {
                    nspm.to(socket.id).emit('ckusr', 'ok');
                    if (!docs.laston) {
                        docs.laston = 0;
                    }
                    initializeConnection(socket, docs.laston);
                }
            }
            else {
                nspm.to(socket.id).emit('ckusr', 'ok');
                initializeConnection(socket, 0);
            }
        });
    });

    function initializeConnection(socket, laston){
        var online = [];
        laston = new Date(laston);
        socket.uid = socket.decoded_token.uid;
        socket.buddies = socket.decoded_token.buddies;
        // id contains all ids of each user
        if (!id[socket.uid]) {
            id[socket.uid] = {};
        }
        id[socket.uid][socket.id] = 1;
        socket.join(socket.uid);
        for (var buddy in socket.buddies) {
            var buddy_id = socket.buddies[buddy];
            socket.join(buddy_id);
            if (uidlist[buddy_id]) {
                online.push(parseInt(buddy_id, 10));
            }
        }
        socket.emit('login', {
            online: online
        });
        socket.broadcast.to(socket.uid).emit('user joined', {
            uid: socket.uid
        });
        data = [];
        data["uid"] = socket.decoded_token.uid;
        data["id"] = socket.id;
        db.updpml(data); // Update user data
    }

您可以使用
会话id
代替
套接字id
或在第一次连接时生成
GUID
,存储到cookie并在页面更改时将其传递给服务器。如何执行?您是否使用会话?您的websocket库是什么:
websocket.io
ws
sockjs
或其他smth?我使用的是socket.io。您想要一个socket.io会话,可以在会话中设置自己的标识符,该标识符对于每个新连接都相同。这将不是
socket.id
。该值属于socket.io,并且对于每个新连接都不同。获得新连接后,如果需要,可以将新的和当前的socket.id设置到该用户自己的数据结构中,尽管您必须意识到一个用户可能同时有多个活动socket(多个选项卡打开)。