1

我正在使用 redis 服务器为 socket.io 中的聊天应用程序存储键值(用户名-socketID)对。

我面临的问题是相同的用户名可以从不同的设备登录,因此会有不同的socketID。所以我必须将一组 socketID 与一个用户名相关联。我试图将数组与键相关联,但似乎只将数组的第一个元素作为字符串。下面是我的代码

将数组设置为键:

var socketIDs = [];
            socketIDs.push(socket.id);
            client.set(username, socketIDs, function (err) {
                console.log("IN USERNAME EVENT" + username + ":" + socketIDs);
            });

从键中获取数组:

client.get(username, function (err, socketIDs) {
                var i = socketIDs.indexOf(socket.id);
                if (i != -1)
                {
                    socketIDs.splice(i, 1);
                }
                client.set(username, socketIDs, function (err) {
                    console.log(username + " DISCONNECTED");
                    socket.disconnect();
                });
            });

当我试图获取与用户名关联的值时,我得到的只是 socketID 作为一个字符串,而不是我最初添加的数组格式。

有什么解决办法吗?或者满足我为单个键存储多个值的要求的最佳方法是什么?

4

1 回答 1

4

我建议使用 alist或 a set。除非您需要重复检查,否则我会使用 a list(如果需要,则使用 a set)。以下所有示例都是基于的,但您可以在此处list找到等效示例。set

添加新的套接字 ID

client.lpush(username, socket.id, function(err) {
    console.log('Prepended new socket ID to list');
});

获取用户的所有套接字 ID

client.lrange(username, 0, -1, function(err, socketIds) {
});

删除给定的套接字 ID

client.lrem(username, socketId, 0, function(err) {
});

(我假设您正在使用该node_redis库)。

于 2013-07-31T14:25:17.113 回答