【发布时间】:2017-04-10 18:48:12
【问题描述】:
我正在使用 socket.io、redis 来跟踪用户的在线/离线状态。在这里,我使用模式 hub_id 存储名称为键的用户数。我可以通过获取匹配 hub_ 模式的键的数量来获取用户数量。现在密钥具有在线或离线状态的价值。
我无法得到否。 for 循环外的用户在线或离线变量。
app.get('/test', function(req, res) {
client.keys('hub*', function (err, keys) {
console.log(keys.length);
for (var i=0; i<keys.length; i++){
client.hgetall(keys[i], function(err, reply) {
if(reply.status == "online"){
onlinehub++;
}
else if(reply.status == "offline"){
offlinehub++;
}
});
}
console.log(onlinehub +"-" +offlinehub)
});
});
【问题讨论】:
-
请注意,
HGETALL在服务器运行时会阻塞服务器 - 如果您的哈希很大,这可能需要一段时间......相反,您应该做的是保持计数器(在 Redis 中)您的离线/在线/任何用户,这样您就可以通过一次读取操作获得回复。