Node.js 如何使用socket.io引用客户端而不是套接字?

Node.js 如何使用socket.io引用客户端而不是套接字?,node.js,express,socket.io,Node.js,Express,Socket.io,我正在学习express和socket.io,但还没有找到问题的答案。我需要引用客户机而不是套接字,因为我有多个页面连接到服务器,它会创建不同的套接字,所以我无法跟踪用户。正确的方法是什么?我还没有找到一个有意义的解决方案 本质上,我想要做的就是能够引用同一个客户机,无论它们在我的服务器的哪个页面上。但是如果我有两段像这样的代码来跟踪用户,那就行不通了 socket.on('set name', function (name) { console.log("set name My soc

我正在学习express和socket.io,但还没有找到问题的答案。我需要引用客户机而不是套接字,因为我有多个页面连接到服务器,它会创建不同的套接字,所以我无法跟踪用户。正确的方法是什么?我还没有找到一个有意义的解决方案

本质上,我想要做的就是能够引用同一个客户机,无论它们在我的服务器的哪个页面上。但是如果我有两段像这样的代码来跟踪用户,那就行不通了

socket.on('set name', function (name) {
    console.log("set name My socket id is " + socket.id);
    socket.set('username', name);
    socket.get('username', function (error, value) {
        console.log("set name Socket.username " + value);
    });
});
后来

socket.on('getusername', function () {
    console.log("getusername My socket id is " + socket.id);
    socket.get('username', function (error, value) {
        console.log("getusername Socket.username " + value);
    });
});
socket.on('getusername', function () {
    // get all the rooms socket is part of and use the
    // first room he is in.
    var room = io.sockets.manager.roomClients[socket.id][0];
});

第二个代码是从另一个页面调用的,引用客户端而不是套接字的选项是什么?

您可以尝试在客户端上设置浏览器cookie(用户关闭浏览器时将删除的cookie)并在初始化套接字连接时在消息负载中发送其值。

您可以在socket.io中使用房间的概念

具有相同名称的所有插座可以连接到一个房间

大概是这样的:

socket.on('set name', function (name) {
    socket.join(name);
});
后来

socket.on('getusername', function () {
    console.log("getusername My socket id is " + socket.id);
    socket.get('username', function (error, value) {
        console.log("getusername Socket.username " + value);
    });
});
socket.on('getusername', function () {
    // get all the rooms socket is part of and use the
    // first room he is in.
    var room = io.sockets.manager.roomClients[socket.id][0];
});