Node.js 如何更改套接字的id?
我在node.js中制作了一个应用程序,我注意到每次用户打开新页面或更改页面时,他们都会获得不同的套接字id。是否可以更改该套接字的id,以便用户始终具有相同的套接字id? 当用户连接到服务器时,它将uid和套接字id保存在mongodb中,并在每次连接时获取该数据 这是我的代码: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){
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(多个选项卡打开)。