2

我将用户名/SocketID 对存储在我的 socket.io 聊天应用程序的 redis 存储中。

当用户断开连接时,我需要从 redis 存储中删除用户名/socketID 对。我已经看到了如何从键中获取值,但从来没有从值中获取键。是否可以?或者无论哪种方式,我如何才能从值中删除键/值对。这是我的代码

用于在连接时添加到存储

socket.on('username', function (username) {

    client.set(username, socket.id, function (err) {
        console.log(username + ":" + socket.id);
    });

});

对于断开连接,客户端不知道何时会发生断开连接,这可能是由于失去互联网连接而发生的,但是当套接字断开连接时,它总是会触发“断开连接”事件。在这种情况下,我需要删除用户名/socketID 对。

socket.on('disconnect', function () {

// dont know the username??

    client.del(username, socket.id, function (err) {
        if (err)
            console.log(err);
        else {
            socket.disconnect();
            console.log(socket.id + " DISCONNECTED");
        }
    });
});
4

2 回答 2

1

最简单的方法是存储对。一个与username/id一个与id/username。因此,无论您拥有什么信息,您都可以获得另一个信息,因此也可以获得另一个键/值对。

于 2013-04-26T06:30:51.467 回答
0

我建议您将 socket.io Id 合并到密钥中,例如

id:username

然后你可以做这样的事情

client.keys([socket.id + ':*'], function (err, result) {
    if (err){
        //handle in some way
    }

    for (var r in result) {
        var key = result[r];

        client.del(key, function(err, result){
            // handle in some way
        });
    }
});
于 2013-04-25T14:27:34.730 回答