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

时间:2013-11-08 02:16:47

标签: node.js express socket.io

我正在尝试学习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);
    });
});

从另一个页面调用第二个代码,我可以选择引用客户端而不是套接字?

2 个答案:

答案 0 :(得分:1)

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

所有同名的插座都可以进入房间。

这样的事情:

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

以后

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];
});

答案 1 :(得分:0)

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